Форма поиска и Listview на одной странице

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Форма поиска и Listview на одной странице

Сообщение Drugpunker »

Здравствуйте всем.
Товарищи помогите разобраться.

Форма поиска и результат выводятся на одной странице.
Не могу придумать какую логику задать контроллеру, для рендеринга, если перешли на другую страницу в Listview(pager).
Форма отправляет POST запросы.
Проблема в том, что при клике на следующую страницу выборки, контроллер рендерит только форму, т.к.Post переменной нет.

Контроллер:

Код: Выделить всё

public function actionS()
    {
        $model = new PostsSearchForm();
        $dataProvider = null;

        if (Yii::$app->request->isPost) {

            $model->attributes = $_POST['PostsSearchForm'];

            if($model->validate()) {
                $dataProvider = $model->search($_POST['PostsSearchForm']['text']);
            }
        }

        return $this->render('view', [
            'dataProvider' => $dataProvider,
            'searchModel' => $model,
        ]);
    }
Ну и, собственно, вьюха:

Код: Выделить всё

echo PostsSearchWidget::widget([
    'model' => $searchModel
]);

if ($dataProvider !== null) {

    echo ListView::widget([
        'dataProvider' => $dataProvider,
        'itemView' => '/posts/posts',
        'viewParams' => [],
        'pager' => [
            'pagination' => $dataProvider->setPagination([
                'pageSize' => 1,
                'forcePageParam' => false,
                'pageSizeParam' => false,
            ]),

            'firstPageLabel' => 'Первая',
            'lastPageLabel' => 'Последняя',
            'nextPageLabel' => '>',
            'prevPageLabel' => '<',
            'maxButtonCount' => 3,
        ],
        'summary' => false,
    ]);
Предполагаю, что нужно задать в контроллере отлов Get из url.
Но что потом с ним делать?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Форма поиска и Listview на одной странице

Сообщение Dominus »

Попробуйте сгенерировать из gii, GRUD, там будут все ответы на ваш вопрос)

https://yiiframework.com.ua/ru/doc/guide/2/start-gii/
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Форма поиска и Listview на одной странице

Сообщение Drugpunker »

Dominus писал(а): 2020.07.29, 14:04 Попробуйте сгенерировать из gii, GRUD, там будут все ответы на ваш вопрос)

https://yiiframework.com.ua/ru/doc/guide/2/start-gii/
Спасибо за совет конечно. Но не прислушался, т.к. не вижу связи CRUD с задачей.
Сомневаюсь, что хоть что-то новое обнаружу.

В итоге от post формы отказался.
Сделал get, обернул форму и listview в pjax.
Всё работает.
Хотелось конечно с post сделать. Ай, лень додумывать вобщем.

Единственное, при загрузке страницы, каждый раз стала валиться ошибка валидации формы, из-за метода validate в методе search.
Решил в контроллере:

Код: Выделить всё

public function actionS()
    {
        $model = new PostsSearchForm();
        $dataProvider = null;

        if(Yii::$app->request->queryParams) {
            $dataProvider = $model->search(Yii::$app->request->queryParams);
        }

        return $this->render('view', [
            'dataProvider' => $dataProvider,
            'searchModel' => $model,
        ]);
    }
Вроде вышло тонко и красиво.
Может быть кому-нибудь пригодится.
Ответить