2016-06-23 52 views
0

我正在爲給定場景上的驗證數據創建函數,但它不起作用。 型號代碼:Yii2對場景不起作用的自定義驗證

public function rules() 
    { 
     return [ 
    // ['session_key','deal_id','required'], 
     ['data', 'validateCart'], 
     [['session_key','deal_id'], 'safe'], 
     // [['cartfood','session_key'], 'required','on'=>'sessionapi'], 
     ['cartfood', 'myvalidation', 'on' => 'sessionapi'], 
     ]; 
    } 

public function myvalidation($attribute, $params){ 
      if (!$this->hasErrors()) { 
      echo '<pre>'; print_r($params); die; 
      } 
    } 

控制器:代碼

public function actionPayinapp(){ 
     $data=Yii::$app->getRequest()->getBodyParams();  
     $cart=json_decode($data['cartfood']); 
     $model=new Cart(); 
     $model->scenario = 'sessionapi'; 
     $dataarr = array(); 
     $model->data = $cart; 
if($model->validate()) 
     { 
die(ok); 
} 
} 

我想myvalidationsessionapi方案運行,但它不工作。

+0

嘗試:[ '上'=> [ 'sessionapi' cartfood', 'myvalidation'], –

+0

@YasinPatel不工作 – Arunendra

+0

$模式=新購物車(); $ model-> scenario ='sessionapi'; –

回答

2

改變你的控制器代碼: - SkipOnEmpty

public function rules() 
{ 
    return [ 
     // ['session_key','deal_id','required'], 
     ['data', 'validateCart'], 
     [['session_key','deal_id'], 'safe'], 
     // [['cartfood','session_key'], 'required','on'=>'sessionapi'], 
     //you have to apply skipOnEmpty in your rules as 
     ['cartfood', 'myvalidation', 'on' => 'sessionapi' ,'skipOnEmpty' => false], 
    ]; 
} 

public function myvalidation($attribute, $params){ 
    if (!$this->hasErrors()) { 
     echo '<pre>'; print_r($params); die; 
    } 
}