【问题标题】:Model rule variable required without scenario (Yii2)没有场景需要模型规则变量(Yii2)
【发布时间】:2015-08-03 09:02:14
【问题描述】:

如何创建仅当数据库中的某个值为 1 时才需要的模型规则?

我尝试使用 'required', 'when' 规则,但这似乎并没有更新客户端 JavaScript。

我还尝试了一个自定义内联验证器,但它似乎没有发布一个空字段。

我认为场景不是一个选项,因为我有 6 个字段,并且可以有必需/非必需的任意组合。

编辑

目前我只是从不添加所需的规则,而不是直接返回我将它们存储在变量中的规则。 $rules = []

然后在返回变量之前,我将所需的选项添加到数组中。
if($x->x_required) $rules[] = ['your-field', 'required', 'on' => 'your-scenario'];

这是一个快速修复,我不太喜欢它,但它确实有效。我不确定是否有更好的方法。

【问题讨论】:

    标签: validation model yii2 rule customvalidator


    【解决方案1】:

    您需要将requiredwhen 组合使用,但对于客户端验证,您需要另外指定whenClient 属性。

    示例(将此添加到您的 rules()):

    [
        'attributeName',
        'required',
        'when' => function ($model) {
            return $model->country == Country::USA;
        },
        'whenClient' => function (attribute, value) {
            return $('#country').value == 'USA';
        },
    ],
    

    官方文档:

    【讨论】:

    • return $('#country').value == 'USA'; 这部分是我不明白的,因为它需要不依赖于数据库值。你怎么能在 Javascript 中检查呢?顺便说一句,它只需要在页面加载时被要求或不需要,如果这样更容易,它就不必是实时的。
    • 你能提供更详细的例子吗?
    • 在这种情况下,我的数据库中有一个“设置”表,它有几个列,如“x_required”、“y_required”。我想要完成的是如果列的值为“1”,则需要表单字段。这是我的问题,因为您的示例似乎检查了其他字段是否需要。
    • 这个例子展示了如何设置只有当另一个属性具有特定值时才需要的属性。或者你可以检查这个属性的值,所以我在这里看不到问题。
    猜你喜欢
    • 2017-05-27
    • 2015-07-05
    • 1970-01-01
    • 2017-09-02
    • 2017-05-03
    • 2017-03-13
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多