【问题标题】:Yii2 compareValidator whenYii2 比较验证器时
【发布时间】:2017-08-03 03:36:31
【问题描述】:

在用户输入验证期间,我想比较一个属性和一个值。

我有这个代码:

['ao_id', 'compare', 'when' => function($model) {
            return $model->lqp_id == 24 || $model->lqp_id == 26 || $model->lqp_id == 46;
        }, 'compareValue' => 50],

它有效(但仅在'enableClientValidation' => false 时),但是否有可能以某种方式显示外部属性的名称?因为如果用户收到外表面 (ao_id) 必须为 50 的错误消息,这并没有多大帮助。没有人知道这是什么意思,因为在下拉列表中您只能看到名称而不是 ID。非常感谢!

【问题讨论】:

    标签: yii2 comparevalidator


    【解决方案1】:

    首先,如果您希望条件验证也能在客户端工作(当enableClientValidation=>true 时),则添加包含将执行验证的javascript 代码的whenClient 属性。

    其次,您可以使用message 属性来指定自定义验证错误。

    [
        'ao_id', 
        'compare', 
        'when' => function ($model) {
            return $model->lqp_id == 24 || $model->lqp_id == 26 || $model->lqp_id == 46;
        }, 
        'whenClient' => "function (attribute, value) {
            return $('#lqp_id').val() == '24' || $('#lqp_id').val() == '26' || $('#lqp_id').val() == '46';
        }", 
        'compareValue' => 50, 
        'message'=>'ao_id must be 50 when lqp_id is 24, 26 or 46'
    ]
    

    注意:请务必检查并更改输入字段的 ID $('#lqp_id'),因为这很可能与我的示例不同。

    【讨论】:

    • 也非常感谢您的回答。你已经解决了我的两个问题,所以我想给你点,但 Bizley 更快,主要问题是message。但是我希望有一个内置函数可以以某种方式将 id 自动转换为相应的名称。不过message目前也不错。
    • 不幸的是,没有函数可以在规则数组本身中获取与id 对应的name,但是您可以在可以的地方创建自定义验证函数.如果您想查看示例,请告诉我,我会更新答案。哦,如果您对答案感到满意,我们将不胜感激 +1 ;)
    【解决方案2】:

    添加message 键,您可以在其中定义将显示的您自己的消息,而不是默认消息。

    【讨论】:

    • 非常感谢,比兹利!
    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多