【问题标题】:YII2 : two models form validation, 2nd model require depend on 1st model inputYII2:两个模型形成验证,第二个模型需要依赖于第一个模型输入
【发布时间】:2014-12-27 09:44:12
【问题描述】:

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

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

形式

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

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

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

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

【问题讨论】:

  • 您好,您有没有为您的查询找到任何解决方案。
  • 听起来太复杂了,请尽量用例子说清楚。

标签: php validation yii2 gii


【解决方案1】:

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

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


        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2015-10-19
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多