Задать вопрос

Как работает наследование правил валидации в yii2?

Добрый день.
Возник такой вот вопрос, как работает наследование?
Есть две модели, родительская и дочерняя.
В дочерней модели определены дополнительные свойства - масса и объём. Так же объединяется массив правил валидации и массив сценариев с родительскими массивами.
Дочерняя модель.
public $mass;
    public $capacity;

    public function rules()
    {
        return ArrayHelper::merge(parent::rules(),[

            [['mass', 'capacity'], 'number', 'on' => self::SCENARIO_CALC_FORM],
            
        ]);
    }

    public function scenarios()
    {
        $scenarios = parent::scenarios();
        $scenarios[self::SCENARIO_CALC_FORM] = ['mass', 'capacity'];
        return $scenarios;
    }

Вот при таком раскладе не идёт ajax валидация для этих полей в форме, только после отправки формы или проверки других полей формы, в ответе сервера видно, что поля валидируются, но сообщения не выводятся.
59f4543572c7a242846132.png
Если же эти поля, массы и объёма, добавить в правила валидации родительской таблицы, то ajax валидация работает без проблем. Но эти поля не нужны в родительской, незачем их там определять.
Вот и вопрос, что не так с наследованием? Как правильно наследовать правила валидации?

p.s. В родительской модели никакие сценарии не используются.

p.s.s var_dump правил валидации дочерней модели
  • Вопрос задан
  • 1360 просмотров
Подписаться 8 Простой 2 комментария
Решения вопроса 1
@BorisKorobkov
Web developer
Еще надо в метод attributes() аналогично добавить ваши поля.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@LAV45
А чем простой array_merge() не устраивает?

public function rules()
{
    return array_merge(parent::rules(), [
// ...
    ]);
}
Ответ написан
Ваш ответ на вопрос

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

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