Валидация, ActiveRecord и Pjax

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

Валидация, ActiveRecord и Pjax

Сообщение Kutkh »

Привет!
При заполнении формы, то происходит проверка введенных данных в поля формы согласно правилам метода rules().
Часть данных проверяется на стороне клиента, другая на стороне сервера, т.е. требуется перезагрузка страницы.
Если необходимо записать данные в БД при выполнении метода save() данные подвергаются еще раз валидации.
Первый вопрос, а как можно реализовать, чтобы валидация и запись в БД осуществлялась без перезагрузки страницы?

Второй вопрос связан с плагином Pjax, есть форма состоящая из одного поля input и никаких кнопок, пользователь вводит данные и после того, как он ввел 3 символа и более под формой выводятся результаты поиска из базы данных по этим полем, я не нашел такой метод в этом плагине.
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Валидация, ActiveRecord и Pjax

Сообщение Alexum »

Kutkh писал(а): 2017.05.22, 09:52 Привет!
При заполнении формы, то происходит проверка введенных данных в поля формы согласно правилам метода rules().
Часть данных проверяется на стороне клиента, другая на стороне сервера, т.е. требуется перезагрузка страницы.
Если необходимо записать данные в БД при выполнении метода save() данные подвергаются еще раз валидации.
Первый вопрос, а как можно реализовать, чтобы валидация и запись в БД осуществлялась без перезагрузки страницы?
Могу предложить следующий вариант с ajx-валидацией: viewtopic.php?f=19&t=43467&p=216998#p216998
Kutkh писал(а): 2017.05.22, 09:52 Второй вопрос связан с плагином Pjax, есть форма состоящая из одного поля input и никаких кнопок, пользователь вводит данные и после того, как он ввел 3 символа и более под формой выводятся результаты поиска из базы данных по этим полем, я не нашел такой метод в этом плагине.
Можно воспользоваться готовым решением - плагином select2 от картика, пример: http://demos.krajee.com/widget-details/ ... usage-ajax
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Валидация, ActiveRecord и Pjax

Сообщение mkramer »

Kutkh писал(а): 2017.05.22, 09:52 Привет!
При заполнении формы, то происходит проверка введенных данных в поля формы согласно правилам метода rules().
Часть данных проверяется на стороне клиента, другая на стороне сервера, т.е. требуется перезагрузка страницы.
Если необходимо записать данные в БД при выполнении метода save() данные подвергаются еще раз валидации.
Первый вопрос, а как можно реализовать, чтобы валидация и запись в БД осуществлялась без перезагрузки страницы?
Есть. Называется AJAX. Отправляйте форму сами через AJAX. Я использую это: https://jquery-form.github.io/form/, можно использовать, кстати, и pjax.
Kutkh писал(а): 2017.05.22, 09:52 Второй вопрос связан с плагином Pjax, есть форма состоящая из одного поля input и никаких кнопок, пользователь вводит данные и после того, как он ввел 3 символа и более под формой выводятся результаты поиска из базы данных по этим полем, я не нашел такой метод в этом плагине.
Потому что этого функционала у плагина нету. Надо спрограммировать самому.
Kutkh
Сообщения: 13
Зарегистрирован: 2017.04.20, 19:19

Re: Валидация, ActiveRecord и Pjax

Сообщение Kutkh »

тогда по порядку, первый вопрос:
view:

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

<?php $form = ActiveForm::begin(); ?>
    <?= $form->field($payment, 'auto');  ?>
    <?= $form->field($payment, 'check', ['enableAjaxValidation' => true]); ?> // тут нужна ajax вализация
     <?= Html::submitInput('Оплатить', ['id' => 'submit-payment', 'name' => 'submit-payment']) ?>
     <?= $checkpayment; ?> // тут выводится блок данных, нужна ajax обновление при корректном заполнении формы и записи данных в БД
    <?php ActiveForm::end(); ?>
controller:

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

use yii\widgets\ActiveForm;
use yii\web\Response;

  $model = new Model();
        $checkpayment = $model::checkPaymen();
        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post()))
        {
            if ($model->addCheck($model))
            {
    // необходимо очистить поля формы, не перегружая страницу
                return $model;
            }
            else
            {
                return ActiveForm::validate($model);
            }
        }

панель отладки выдает 500 ошибку
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Валидация, ActiveRecord и Pjax

Сообщение Alexum »

1) Покажите action целиком
2) Объясните словами, как по вашему это должно работать?
3) И вот это никак не смущает $model->addCheck($model)?
Kutkh
Сообщения: 13
Зарегистрирован: 2017.04.20, 19:19

Re: Валидация, ActiveRecord и Pjax

Сообщение Kutkh »

вроде бы разобрался, получилось вот так:

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

        $model = new Model();
        $checkpayment = $model::checkPaymen();
        if (Yii::$app->request->isAjax && $model ->load(Yii::$app->request->post()))
        {
            Yii::$app->response->format = Response::FORMAT_JSON;
            if ($model ->validate())
            {
                $model ->addCheck($payment);
                $this->refresh();
            } else
            {
                return ActiveForm::validate($model);
            }
        }
но тут вылезло 2 проблемы:
1. если данные заполнены валидным кодом и шелкаешь по любому месту в окне и данные записываются, как сделать, чтобы только при нажатии кнопки
2. $this->refresh() но очищает данные с перезагрузкой страницы, а как без?
Ответить