Menus

Sunday, 22 October 2017

Yii2 Validating Input


Given a model populated with user inputs, you can validate the inputs by calling the yii\base\Model::validate() method. The method will return a boolean value indicating whether the validation succeeded or not. If not, you may get the error messages from the yii\base\Model::$errors property. 


Yii2 Custom Rules 



Open your model, add this code

public function rules()
    {
        return [
       .....
       ....
       ['enquiry_reference_no', 'uniqueReference_no'],  //Custom Validation In Yii2.0
     ],



public function uniqueReference_no($attribute, $params)
    {      
        if ($this->isNewRecord ==1)
        {
        $Stud = Enquiry::find()->where(['enquiry_reference_no' => $this->enquiry_reference_no])->one();  
        }
        else {      
            $Stud = Enquiry::find()->where('enquiry_reference_no = :en and enquiry_number != :an', ['en' => $this->enquiry_reference_no,'an' => $this->enquiry_number])->one();
        }
         
        if($Stud)
          $this->addError($attribute, 'Reference Number must be unique');
     
    }

}  


Code add in Controller

public function actionCreate()
    {
     
             
             $model = new Enquiry();
     
            //ajax validation..
            if(yii::$app->request->isAjax && $model->load($_POST))
            {
                yii::$app->response->format = 'json';
                return \yii\widgets\ActiveForm::validate($model);
            }

public function actionCreate()
    {
     
     
        $model = new Enquiry();
     
            //ajax validation..  for reference number unique
            if(yii::$app->request->isAjax && $model->load($_POST))
            {
                yii::$app->response->format = 'json';
                return \yii\widgets\ActiveForm::validate($model);
            }
         

           if ($model->load(Yii::$app->request->post())) {
           .........
           }
    .........
  }


Enable ajax validation in form

<?php $form = ActiveForm::begin(['enableAjaxValidation' => TRUE]); ?>



More Details
http://www.yiiframework.com/doc-2.0/guide-input-validation.html



Data Type Validation In Yii2.0

[['boolean_var'],'boolean'],
Other Types - number,integer,'double','string'

Required Validation In Yii2.0

[['username'],'required'],

Assigning Default Value In Yii2.0

// set "email" as null if they are empty [['email'],'default'], // set "level" to be 111 if it is empty [['level'],'default','value'=>'111'],

Minimum, Maximum Number Validation In Yii2.0

[['slno'],'number','max'=>100], [['roll_no'],'number','min'=>10,'max'=>100],

Minimum, Maximum String Validation In Yii2.0

[['max_string'],'string','max'=>10], [['min_max_string'],'string','min'=>5,'max'=>10], ['min_max_string2', 'string', 'length' => [4, 10]]

File Type/ Image Validation In Yii2.0

[['file_image'],'image'], [['file_var'],'file','types'=>['gif','jpg']], ['file_image', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024], ['file_image', 'image', 'extensions' => 'png, jpg, gif', 'minWidth' => 100, 'maxWidth' => 500, 'minHeight' => 100, 'maxHeight' =>500,],

Date Format Validation In Yii2.0

[['date_var'],'date', 'format'=>'d-m-yy'],

Email, URL Format Validation In Yii2.0

['email_var','email'], ['url_var','url'], //prepend the 'http' with url if it is not available ['website', 'url', 'defaultScheme' => 'http'],

Unique Validation In Yii2.0

[['unique_var'],'unique'],
//email is validated in secondary_email column ['email', 'unique', 'targetAttribute' => 'secondary_email'],

exist Validation In Yii2.0

['user_name', 'exist'], //email should not be exist in secondary_email ['email', 'exist', 'targetAttribute' => 'secondary_email'],

Filter Validation In Yii2.0

[['filter_trim'],'filter','filter'=>'trim'],
['filter_custom_function', 'filter', 'filter' => function ($value) { // your concept if($value=='') return ''; return 'Value Changed'; }],

Range In Validation In Yii2.0

['range_in_min_max', 'in','range'=>range(5,20)], ['range_in','in','range'=>['en','fr','zn']], ,'strict'=>false], ['range_in_string','in','range'=>['EN','FR','ZN'],'strict'=>true],

Compare Validation In Yii2.0

[['passwordConfirm'], 'compare', 'compareAttribute' => 'password'],// validates if the value of "password" attribute equals to that of "password_repeat" ['password', 'compare'],//password_repeat ['age', 'compare', 'compareValue' => 18, 'operator' => '>='], [['password','date_var'],'safe'],
 we have to check They are '==','===','>','>=','<','<=', '!=','!=='

Custom Validation In Yii2.0

public function rules(){ return [ ['custom_validation','custom_function_validation', 'values'=>['One', 'Two']], ]; } public function custom_function_validation($attribute, $params){ // add custom validation if (!in_array($this->$attribute, $params['values'])) $this->addError($attribute,'Custom Validation Error'); }
Inline Custom Validation In Yii2.0
public function rules(){ return [ ['token', function ($attribute, $params) { if (!ctype_alnum($this->$attribute)) { $this->addError($attribute, 'The token must contain letters or digits.'); } }], ]; }

captcha Validation In Yii2.0
['verificationCode', 'captcha'],

match Validation In Yii2.0
['user_name', 'match', 'pattern' => '/^[a-z]\w*$/i']



Related Links

DropDownList

Yii2 Dependent Drop Down Lists

CheckboxList Advanced Operations

Yii2 ListBox Field