Yii2 compare date in model with function

Hello All,

I have model with below rules


public function rules()

{

  return [    

   ['student_dob', 

        function ($attr) {

            $curr_date = date('d-m-Y');

            if(empty($this->student_adm_date)) {

                //$this->addError('student_dob',"Select Admission date first"); 

                return true;

            }

            else {

              $dob = date('Y-m-d',strtotime($this->$attr));

              $adm = date('Y-m-d',strtotime($this->student_adm_date));

              $diff = $adm-$dob;

               if($diff <= 14)  {


                $this->addError('student_dob', "Birth date must be less than Admission date."); 

                return false;   


               }


               else

                return true;

            }


                if (!empty($this->$attr) && !Password::validate($this->$attr, $this->password_hash)) {

                    $this->addError($attr, \Yii::t('user', 'Current password is not valid'));

                }

            },

        ]

    ];

}

Above rule specify the student_dob is less than with 14 to student_adm_date.

This rule works good but error message don’t appear on view page and my form view is below


<?php   $form = ActiveForm::begin([

    'layout' => 'horizontal',

    'fieldConfig' => [

        'template' => "{label}\n{beginWrapper}\n{input}\n{error}\n{endWrapper}",

        'horizontalCssClasses' => [

            'label' => 'col-sm-4',

            'offset' => 'col-sm-offset-4',

            'wrapper' => 'col-sm-8',

            'error' => '',

            'hint' => '',

        ],

    ],

]);

?>

<div class="row-left">

            <?= $form->field($info, 'student_dob', ['template' => "{label} {input} <span class='status'>&nbsp;</span> {error}"])->widget(yii\jui\DatePicker::className(),

                    [

            'model'=>$info, 

            'attribute'=>'student_dob',

            'value'=>'',

                        'clientOptions' =>[

                        'dateFormat' => 'dd-mm-yyyy',

                        'changeMonth'=> true,

                        'changeYear'=> true,

                        'autoSize'=>true,

                        'showOn'=> "button",

            'yearRange'=>'1900:'.(date('Y')+1),

                        'buttonImage'=> Yii::$app->homeUrl."images/calendar.png",

                        'htmlOptions'=>[

                        'style'=>'width:250px;',

                          'class'=>'form-control',

                         ]]]); ?> 


        </div>

<?php ActiveForm::end(); ?>

I want to compare student_dob and student_adm_date with student_dob < student_adm_date rule validation, also error message appear on view form page.

after understanding of my form.php code; i got a solution that remove


template

from


fieldconfig

option on


ActiveForm::begin

.

after that code is…


<?php   $form = ActiveForm::begin([

    'layout' => 'horizontal',

    'fieldConfig' => [

        'horizontalCssClasses' => [

            'label' => 'col-sm-4',

            'offset' => 'col-sm-offset-4',

            'wrapper' => 'col-sm-8',

            'error' => '',

            'hint' => '',

        ],

    ],

]);

?>

<div class="row-left">

            <?= $form->field($info, 'student_dob', ['template' => "{label} {input} <span class='status'>&nbsp;</span> {error}"])->widget(yii\jui\DatePicker::className(),

                    [

            'model'=>$info, 

            'attribute'=>'student_dob',

            'value'=>'',

                        'clientOptions' =>[

                        'dateFormat' => 'dd-mm-yyyy',

                        'changeMonth'=> true,

                        'changeYear'=> true,

                        'autoSize'=>true,

                        'showOn'=> "button",

            'yearRange'=>'1900:'.(date('Y')+1),

                        'buttonImage'=> Yii::$app->homeUrl."images/calendar.png",

                        'htmlOptions'=>[

                        'style'=>'width:250px;',

                          'class'=>'form-control',

                         ]]]); ?> 


        </div>

<?php ActiveForm::end(); ?>

Thanks to hirenb for hint… ;) ;) ;) ;) ;)