2015-08-13 5 views
3

Я использовал обычную проверку. Но это не работает. Вот моя модельНестандартная проверка не работает в yii2

class Manufacture extends \yii\db\ActiveRecord 
{ 
public function rules() 
    { 
     return [ 
      [['model_no'], 'safe'], 
      ['model_no', 'customValidation', 'skipOnEmpty' => false, 'skipOnError' => false], 
      ]; 
    } 

    public function customValidation($attribute, $params) 
    { 

     if($this->model_no=='test') 
     { 
     $this->addError($attribute,'add proper data.'); 
     } 
    } 

} 

В контроллере

public function actionCreate() 
    { 
     if ($model->load(Yii::$app->request->post())) { 
       if ($model->validate()) { 
       //some code 
      } 
     } 
} 

Здесь я имею добавить атрибут в сейфе, но до сих пор моя ошибка не отображается в форме представления.

ответ

4
// MODLE CODE 
class Manufacture extends \yii\db\ActiveRecord 
{ 

    public function rules() 
    { 
     return [ 
      [['model_no'], 'required'], 
      ['model_no', function ($attribute, $params) 
       { 

        if ($this->$attribute == 'test') 
        { 
         $this->addError($attribute, 'You have entered test'); 
        } 
        else 
        { 
         $this->addError($attribute, "You have not entered test but you have entered {$this->$attribute} "); 
        } 
       }], 
     ]; 
    } 

} 

// CONTROLLER CODE 
public function actionCreate() 
{ 
    $model = new Manufacture(); 
    if ($model->load(Yii::$app->request->post())) 
    { 
     if ($model->validate()) 
     { 
      //HERE YOU CAN WRITE YOUR CODE TO SAVE THE DATA 
     } 
     else 
     { 
      // HERE YOU CAN PRINT THE ERRORS OF MODEL 
      echo "<pre>"; 
      print_r($model->getErrors()); 
      echo "</pre>"; 
     } 
    } 
}