Почему не проходит самоcтоятельная валидация?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Почему не проходит самоcтоятельная валидация?

Сообщение Sergalas »

Попытался организовать собственную валидацию вот модель

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

class SearchForm extends Model
{
    public $ingredients;

    public function rules(){
        return[
            ['ingredients', function ($attribute, $params) {
                if (count($this->attribute)<2) {
                    $this->addError($attribute, 'Выберите больше ингредиентов.');
                }
                if (count($this->attribute)>5) {
                    $this->addError($attribute, 'Нельзя выбрать больше 5 ингредиентов.');
                }
            }]
        ];
    }
}
контролер

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

public function actionIndexSite()
    {
        $model=new SearchForm();
        return $this->render('indexsite', [
            'model'         =>  $model
        ]);
    }
часть вида

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

        <?php $form = ActiveForm::begin(); ?>
        <?php echo $form->field($model, 'ingredients')->widget(Select2::classname(), [
                'language' => 'en',
                'data' => $ingredients,
                'options' => ['multiple' => true, 'placeholder' => 'Select ingredients'],
            ]); ?>

        <div class="form-group">
            <div class="col-lg-offset-1 col-lg-11">
                <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
            </div>
        </div>
        <?php ActiveForm::end(); ?>
вот такой массив получаю

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

SearchForm 	[
    'ingredients' => [
        0 => '1'
    ]
]
валидация проходит и страница перегружается почему не подскажите и как правильно.
Последний раз редактировалось Sergalas 2017.08.18, 06:55, всего редактировалось 1 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Почему не проходит самомтоятельная валидация?

Сообщение zelenin »

ну продебажь) проверь вызывается ли вообще твой валидатор
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Re: Почему не проходит самомтоятельная валидация?

Сообщение Sergalas »

zelenin писал(а): 2017.08.17, 21:38 ну продебажь) проверь вызывается ли вообще твой валидатор
вот таким образом пойдет или что другое имелось в виду?

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

 if ($model->load(Yii::$app->request->post())){
            return var_dump(Yii::$app->request->post());
        }
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Re: Почему не проходит самомтоятельная валидация?

Сообщение Sergalas »

zelenin писал(а): 2017.08.17, 21:38 ну продебажь) проверь вызывается ли вообще твой валидатор
или так ?

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

 if ($model->load(Yii::$app->request->post())){
            return var_dump($model->validate(Yii::$app->request->post()));
        }
в первом случае массив $_POST выдается во втором true
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Почему не проходит самомтоятельная валидация?

Сообщение ElisDN »

Косяки в слове "самомтоятельная", поле $this->attribute и вызове $model->validate(Yii::$app->request->post()).
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Re: Почему не проходит самомтоятельная валидация?

Сообщение Sergalas »

ElisDN писал(а): 2017.08.18, 00:11 Косяки в слове "самомтоятельная", поле $this->attribute и вызове $model->validate(Yii::$app->request->post()).
А что не правильно в $this->attribute и в $model->validate(Yii::$app->request->post())?
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Re: Почему не проходит самомтоятельная валидация?

Сообщение Sergalas »

ElisDN писал(а): 2017.08.18, 00:11 Косяки в слове "самомтоятельная", поле $this->attribute и вызове $model->validate(Yii::$app->request->post()).
в общем исправил на вот так

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

 public function rules(){
        return[
            ['ingredients', 'arrayValidate','skipOnEmpty' => false , 'skipOnError' => false ]
        ];
    }
    public function arrayValidate($attribute, $params, $validator){
        if (count($this->$attribute)>2) {
            $this->addError($attribute, 'Выберите больше ингредиентов.');
        }
        if (count($this->$attribute)<5) {
            $this->addError($attribute, 'Нельзя выбрать больше 5 ингредиентов.');
        }
    }

в моделе
и вот так в контролере

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

if ($model->load(Yii::$app->request->post())){
            return var_dump($model->validate());
        } 
возвращает false но сообщений не появляется при не правильно заполненном и селекте
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Почему не проходит самоcтоятельная валидация?

Сообщение ElisDN »

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

var_dump($model->validate());
print_r($model->getErrors());
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Re: Почему не проходит самоcтоятельная валидация?

Сообщение Sergalas »

ElisDN писал(а): 2017.08.18, 09:21

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

var_dump($model->validate());
print_r($model->getErrors());
первый false
второй Array ( ) 1
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Почему не проходит самоcтоятельная валидация?

Сообщение ElisDN »

beforeValidate не переопределили случайно?
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Re: Почему не проходит самоcтоятельная валидация?

Сообщение Sergalas »

ElisDN писал(а): 2017.08.18, 11:22 beforeValidate не переопределили случайно?
у меня идет переопределение поведения dektrium/yii2-user
вот таким образом

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

'registration' => [
                    'class' => \dektrium\user\controllers\RegistrationController::className(),
                    'on ' . \dektrium\user\controllers\RegistrationController::EVENT_AFTER_REGISTER  => function ($event) {
                        $auth = Yii::$app->authManager;
                        $role = $auth->getRole('user');
                        $user = \dektrium\user\models\User::findOne(['username' => $event->form->username]);
                        $auth->assign($role, $user->id);
                    }
                ],
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Почему не проходит самоcтоятельная валидация?

Сообщение ElisDN »

Sergalas писал(а): 2017.08.18, 12:55 у меня идет переопределение поведения dektrium/yii2-user
Это не про SearchForm.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Почему не проходит самоcтоятельная валидация?

Сообщение futbolim »

Читаю первые сообщения и вопрос. Как $this->attribute вообще работало?
Аватара пользователя
Sergalas
Сообщения: 626
Зарегистрирован: 2015.10.15, 12:39

Re: Почему не проходит самоcтоятельная валидация?

Сообщение Sergalas »

futbolim писал(а): 2017.08.18, 16:07 Читаю первые сообщения и вопрос. Как $this->attribute вообще работало?
Разобрался с вопросом стало самому смешно. Всем спасибо.
Ответить