YII2:两种型号形式验证,第二种型号需要依赖于第一型号输入

时间:2014-10-31 06:04:35

标签: php validation yii2 gii

我正在使用YII2,高级模板,使用gii生成模型。

我创建了一个包含两个模型的表单( A B ),除了一条规则外,所有验证规则都在相应的模型中定义,以下是最佳实践案件。

表格

模型 A 的输入字段。 两个输入字段和一个单选按钮 CATEGORY YES NO )。都需要

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

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

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

1 个答案:

答案 0 :(得分:0)

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

例如,如果您的类别属性位于模型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';
            }


        }