@begreeze

Как задать action в форме поиска с дополнительными GET-параметрами Yii2 Framework?

Здравствуйте.
Имееется перечень курсов. И имеется перечень студентов по конкретному курсу.

На страничке перечня студентов (урл: mydomain.com/course-students/index?course_id=1)
имею поисковую форму:

$form = ActiveForm::begin(['id'=>'search-form', 'action'=>['index'], 'method'=>'get', 'fieldConfig'=>['options'=>['tag'=>false]]]);
            echo Html::beginTag('div', ['class'=>'input-group', 'style'=>'width: 300px;']);     
                echo $form->field($model, 'search')->textInput(['class'=>'form-control pull-right', 'placeholder'=>'Поиск...'])->label(false);
                echo Html::beginTag('span', ['class'=>'input-group-btn']);
                    echo (isset($model->search)) ? Html::a('<i class="fa fa-remove"></i>', $form->action, ['class'=>'btn btn-default reset']) : '';
                    echo Html::submitButton('<i class="fa fa-search"></i>', ['class'=>'btn btn-default']);
                echo Html::endTag('span');            
            echo Html::endTag('div');
        $form->end();


Экшн в форме указан как ['index']. Если провожу поиск, то контроллер закономерно ругается, что отсутствуют обязательные параметры: course_id. А поиск конкретного студента нужно проводить для конкретного курса

Вот контроллер:
public function actionIndex($course_id)
    {
        $searchModel = new CourseStudentsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider->query->andWhere(['course_id'=>$course_id]);
        
        return $this->render('index', [
            'searchModel'=>$searchModel,
            'dataProvider'=>$dataProvider
        ]);
    }


Поисковая форма универсальная, т.е. рендерится на разных страничках. Где-то get-параметры могут быть, где-то нет. Если они есть, то они не одинаковые и их кол-во разное.
Есть ли возможность в поисковой форме задать экшн вместе с GET-параметрами?
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Есть ли возможность в поисковой форме задать экшн вместе с GET-параметрами?

Вполне
'action' => Url::to(['page', 'param' => 'value')
Или можно скрытым поле ID курса добавлять. Или еще как-то. Вариантов много, зависят от контекста задачи и условий

public function actionIndex($course_id = null)
    {
        $searchModel = new CourseStudentsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        if (null === $course_id) {
            // Что делаем?
        }

        $dataProvider->query->andWhere(['course_id'=>$course_id]);
        
        return $this->render('index', [
            'searchModel'=>$searchModel,
            'dataProvider'=>$dataProvider
        ]);
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Если провожу поиск, то контроллер закономерно ругается, что отсутствуют обязательные параметры: course_id.

В поисковой модели используете andWhere()?
Для тех данных, которых может не быть в запросе используйте andFilterWhere(), тогда не будет ругаться на отсутствие данных.
Зачем в действие передавать параметр, которого может и не быть в запросе?
Удалите $course_id из обязательного параметра и получайте данные из строки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы