web-dev-qa-db-fra.com

Yii Framework 2.0 Rules Date Validator

J'utilise Yii Framework 2.0. J'ai un formulaire avec un champ de saisie de texte destiné à une date. J'ai lu le Yii Framework 2.0 sur le Classe yii\validators\Validator et connu toutes les clés de validateur qui peuvent être utilisées à l'intérieur de la méthode rules () dans une classe modèle. Lorsque j'utilise date clé comme ci-dessous, cela ne valide rien. Cela signifie que je peux toujours mettre du texte dans ce champ de saisie et poster le formulaire.

Quand je l'ai changé en booléen ou email, j'ai pu voir qu'il valait très bien quand je mettais quelque chose de mal dans le champ de saisie. Comment puis-je valider une valeur de date à l'intérieur d'un champ de saisie avec Yii Framework 2.0?

Ma méthode rules ():

public function rules()
{
    return [
         [['inputfield_date'], 'required'],
         [['inputfield_date'], 'safe'],
         [['inputfield_date'], 'date'],
    ];
}

Ma page d'affichage:

<?php $form = ActiveForm::begin(); ?>
     <?= $form->field($model, 'inputfield_date')->textInput(); ?>
<?php ActiveForm::end(); ?>
14
O Connor

Garçon, les documents Yii sont nulles. Ils ne donnent même pas d'exemple. D'après la réponse d'O'Connor, cela a fonctionné pour moi puisque j'attribuais la valeur dans 2015-09-11 format.

// Rule
[['event_date'], 'date', 'format' => 'php:Y-m-d']
// Assignment
$agkn->event_date = date('Y-m-d');

Les docs ne précisent même pas d'où viennent format ou timestampAttribute, ni comment les utiliser. Il ne dit même pas ce que le diable from_date et to_date sont. Et surtout, pas d'exemples !

27
Chloe

Solution de travail. Ma méthode rules ():

public function rules()
{
   return [
     [['inputfield_date'], 'required'],
     [['inputfield_date'], 'safe'],
     ['inputfield_date', 'date', 'format' => 'yyyy-M-d H:m:s'],
   ];
}

Mon formulaire dans la page d'affichage:

<?php $form = ActiveForm::begin(); ?>
   <?= $form->field($model, 'inputfield_date')->textInput(); ?>
<?php ActiveForm::end(); ?>

Ma méthode dans le contrôleur:

if ($model->load(Yii::$app->request->post()) && $model->validate()):
        if($model->save()):
            // some other code here.....
        endif;
endif;

Notez que le format de date dépend de la façon dont vous définissez votre champ de saisie de format de date. Notez encore une fois qu'il ne s'agit pas d'un validateur AJAX. Après avoir cliqué sur le bouton Soumettre, vous verrez le message d'erreur si vous entrez autre chose qui n'est pas une date.

7
O Connor

Vous pouvez valider une date comme celle-ci à partir des règles du modèle

public function rules(){
    return [
        [['date_var'],'date', 'format'=>'d-m-yy'],
        [['from_date', 'to_date'], 'default', 'value' => null],
        [['from_date', 'to_date'], 'date'],
    ];
}
2
Azraar Azward

Je ne sais pas à 100% comment c'est dans Yii2, mais sortir de Yii1 qui devait ressembler à ça ...

array('org_datetime', 'date', 'format'=>'yyyy-M-d H:m:s'),

(source: http://www.yiiframework.com/wiki/56/#hh8 )

... Je dirais que je devrais ressembler à quelque chose comme ça dans Yii2:

['shopping_date', 'date', 'format' => 'yyyy-M-d H:m:s'],
1
webeno