Yii2 whenClient validation issue

2019-07-11 06:33发布

For some reason I cannot get conditional rule 'required' to work. Even if I reduce the condition to "always return false", required-validation seems to check this unnecessary field:

public function rules() {
    return [
        [['order_id', 'product_id', 'quantity'], 'required'],

        ['product_date', 'required', 
         'whenClient' => "function(attribute, value) {
                              return false;
                          }"
        ],  

       // more rules here
        [['date_create', 'date_update', 'product_date'], 'safe'],
        // more rules here
    ];
}

On form submit save() fails and $model->getErrors() points to product_date as a necessary field. What have I missed? Thank you in advance.

2条回答
乱世女痞
2楼-- · 2019-07-11 06:45

Replace

['product_date', 'required', 

    'whenClient' => "function(attribute, value) {
        return false;
    }"
    ],

With

['product_date', function(attribute, value) {
        return false;
    }],
查看更多
看我几分像从前
3楼-- · 2019-07-11 06:51

You should add the server-side condition to the rule as well (documentation: when):

['product_date', 'required',
 'when'       => function ($model) {
                     return false;
                 },
 'whenClient' => "function(attribute, value) {
                      return false;
                  }"
],  

whenClient is only for JS on the client side. When the form gets submitted the validation has to be done (or skipped) at the server as well. Usually you should have a when definition if you have whenClient definition. The when definition is much more important, whenClient is just to improve the user experience.

Find more infos here.

查看更多
登录 后发表回答