nil
nil

Reputation: 63

Yii2 whenClient validation issue

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.

Upvotes: 2

Views: 6550

Answers (2)

robsch
robsch

Reputation: 9728

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.

Upvotes: 3

chethan
chethan

Reputation: 52

Replace

['product_date', 'required', 

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

With

['product_date', function(attribute, value) {
        return false;
    }],

Upvotes: -1

Related Questions