YI2:两个模型形成验证,第二个模型需要依赖于第一个模型的输入


YII2 : two models form validation, 2nd model require depend on 1st model input

我使用的是YI2,高级模板,使用gii生成模型。

我创建了一个包含两个模型(aB)的表单,除了一个规则外,所有验证规则都在各自的模型中定义,以下情况的最佳实践是什么。

形式

A模型的输入字段。两个输入字段和一个单选按钮CATEGORYYESNO)。所有要求

模型B的输入字段。需要三个输入字段和

四个额外的输入字段取决于CATEGORY单选按钮,如果用户选中YES,则需要额外字段,如果选中NO则不需要额外字段。

那么,我如何定义客户端和服务器端验证的规则呢?哪种型号?我心目中的一个解决方案是创建一个混合模型,并定义所有具有依赖性的规则

我遇到了同样的问题,我找到了这个解决方案。

例如,如果您的类别属性在模型A中,并且它是"yes",那么模型B中的项属性应该是必需的。

例如:

型号A.php:

class A extends 'yii'db'ActiveRecord
{
    public $category;
    public function rules()
    {
        return [
            [['category'], 'safe'],
        ];
    }

}

B.phpB类扩展''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';
            }

        }