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

Попытался организовать собственную валидацию вот модель
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'
    ]
]

валидация проходит и страница перегружается почему не подскажите и как правильно.
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
валидация проходит и страница перегружается

А где же $model-load()? У Вас не только не запускается валидация, вообще данные в модель не загружаются.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Для начала попробуйте наследоваться от основной модели, Ingridients, если я правильно понял.
Ответ написан
mitaichik
@mitaichik
Потомучто писать надо $this->$attribute в валидаторе. А ваш код валидации, имхо, вообще эксепшн должен выкинуть, странно если не так.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы