DatePicker and DateValidator format don't working [solved]

Hi guys, i’m new on community and since last week i have worked in a validation using a jui DatePicker at client side and DateValidator at server side.

When submitting the form, its accepting invalid values for a date, like integer without date format. Could you help me to check where are the errors?

Web




        'formatter' => [

            'dateFormat' => 'dd/MM/yyyy',

            'decimalSeparator' => ',',

            'thousandSeparator' => '.',

            'currencyCode' => 'BR',

        ],



Model (dates fields to validate: data_inscricao_inicio and data_inscricao_termino)




    public function rules()

    {

        return [

            [['nome', 'quant_max_disciplinas', 'periodo_letivo', 'habilitado', 'id_tipo_situacao_inscricao_inicial', 'data_inscricao_inicio', 'data_inscricao_termino'], 'required'],

            [['descricao'], 'string'],

            [['quant_max_disciplinas', 'habilitado', 'id_tipo_situacao_inscricao_inicial'], 'integer'],

            [['data_inscricao_inicio'], 'date'],

            [['data_inscricao_termino'], 'date'],

            [['nome'], 'string', 'max' => 255],

            [['periodo_letivo'], 'string', 'max' => 10]

        ];

    }



Controller




    public function actionCreate()

    {

        $model = new Instancia();


        if ($model->load(Yii::$app->request->post()) && $model->validate()) {

            if ( $model->save()) {

                return $this->redirect(['view', 'id' => $model->id]);

            }

        } else {

            return $this->render('create', [

                'model' => $model,

            ]);

        }

    }



View




    <?= $form->field($model, 'data_inscricao_inicio')->widget(\yii\jui\DatePicker::classname(), [ 'options' => ['class' => 'form-control'], ])

    ?>


    <?= $form->field($model, 'data_inscricao_termino')->widget(\yii\jui\DatePicker::classname(), [

        'options' => ['class' => 'form-control'],

    ])  ?>



I’ve solved the problem after some reading at yii’s github issues (especially https://github.com/yiisoft/yii2/issues/5857). So, i think it’s a problem with dates with backslashes separators. So, pt-br and en-gb locales should have the same problem ;(

My solution was add some variables to store unix timestamp and override afterFind() and beforeSave() methods on model.

Model




    public $date_inicio;

    public $date_termino;


    public function rules()

    {

        return [

            ...

            [['data_inscricao_inicio'], 'date', 'timestampAttribute' => 'date_inicio'],

            [['data_inscricao_termino'], 'date', 'timestampAttribute' => 'date_termino'],

            ...

        ];

    }


   public function beforeSave($insert)

    {

        parent::beforeSave($insert);


        $this->data_inscricao_inicio = Yii::$app->formatter->asDate($this->date_inicio, 'yyyy-MM-dd');

        $this->data_inscricao_termino = Yii::$app->formatter->asDate($this->date_termino, 'yyyy-MM-dd');


        return true;

    }


    public function afterFind()

    {

        parent::afterFind();


        $this->data_inscricao_inicio = Yii::$app->formatter->asDate($this->data_inscricao_inicio, Yii::$app->formatter->dateFormat);

        $this->data_inscricao_termino = Yii::$app->formatter->asDate($this->data_inscricao_termino, Yii::$app->formatter->dateFormat);

        return true;

    }