YII2: валидация формы двух моделей, 2-я модель зависит от ввода 1-й модели

Я использую YII2, расширенный шаблон, генерирую модели, используя gii.

Я создал форму с двумя моделями ( а также В), все правила валидации определяют в соответствующей модели, кроме одного правила, что является наилучшей практикой для следующего случая.

сообщить

поля ввода для модели .
два поля ввода и один переключатель КАТЕГОРИЯ (ДА или же НЕТ). все требуют

поля ввода для модели В.
три поля ввода обязательны и

четыре дополнительных поля ввода зависят от КАТЕГОРИЯ переключатель,
Если пользователь включен ДА чем требуются дополнительные поля и если отмечено НЕТ чем нет необходимости в дополнительных полях.

Итак, как я могу определить правило для проверки на стороне клиента и на сервере? в какой модели? одно решение, на мой взгляд, это создать гибридную модель и определить все правила с зависимостью

3

Решение

У меня была такая же проблема, и я нашел это решение.

например, если ваш атрибут категории находится в модели A и если это было «да», то атрибут элемента в модели B должен быть обязательным.

для этого примера:

модель A.php:

class A extends \yii\db\ActiveRecord
{
public $category;

public function rules()
{
return [
[['category'], 'safe'],
];
}}

B.php
класс B расширяет \ yii \ db \ ActiveRecord

{
public $item;
public $category;

public function rules()
{
return [
[['item'], 'safe'],
[['item'], 'required', 'when' => function($model) {
return $model->category == 'yes';
}]
];
}
}

и в контроллере

$a = new A();
$b = new B();
if ($a->load(Yii::$app->request->post()) && $b->load(Yii::$app->request->post())) {
$b->category= Yii::$app->request->post()['First']['category'];

$isValid = $a->validate();
$isValid = $b->validate() && $isValid;
if ($isValid) {
echo 'its valid';
}}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]