1

J'ai une question sur le widget Kartik DateRangePicker que j'utilise dans ma grille pour filtrer certains résultats.Kartik DateRangePicker avec deux attributs cause invalidDateFormat et NaN lors de la sélection de la date de plage

dans mon SearchModel j'ai créé deux attributs

public $date_start; 
    public $date_end; 

i les utiliser pour filtrer un champ dans la base de données 'insert_date'.

À mon avis, comme la configuration de la grille, je me suis fixé ces options

[ 
      'attribute' => 'insert_date', 
      'options' => ['class' => 'gridview-date-column'], 
      'filter' => DateRangePicker::widget([ 
       'model' => $searchModel, 
       'name' => 'insert_date', 
       'attribute' => 'insert_date', 
       'startAttribute' => 'date_start', 
       'endAttribute' => 'date_end', 
       'convertFormat'=>true, 
       'pluginOptions' => [ 
        'opens'=>'right', 
        'locale' => [ 
         'cancelLabel' => 'Clear', 
         'format' => 'd-m-Y', 
        ], 
       ] 
      ]), 
      'format' => ['date', Yii::$app->formatter->datetimeFormat], 
      'contentOptions'=>['style'=>'min-width: 200px;'] 
     ], 

Par DATE_START $ default et DATE_END $ ont pas une valeur, donc, quand je rentre dans mon point de vue et essayer de filtre ce champ j'obtiens une erreur 'invalidDate' et une série de NaN sur les calendriers.

Ceci est corrigé si je définis une valeur pour ces deux champs ou si je les supprime de la configuration (donc je ne peux utiliser l'attribut insert_date que comme chaîne avec ces deux plages pour le filtrage).

Regarder dans le référentiel de plug-in que j'ai trouvé le same case et que la réponse de l'auteur

Ce problème se produit parce que vous avez un format de date non valide pour les données qui ne correspond pas au format du plug-in.

Mais comme vides, ces champs ne peuvent jamais avoir un format de données correct.

Quelqu'un a eu le même problème? Merci d'avance pour toutes les réponses.

Répondre

0

J'ai la solution:

Dans le plugin Kartik il y a un modèle de comportement que je peux inclure dans mon searchModel:

use kartik\daterange\DateRangeBehavior; 

Alors je peux instancier les comportements essentiels() méthode:

public $date_start; 
public $date_end; 

public function behaviors() { 
    return [ 
     [ 
      'class' => DateRangeBehavior::className(), 
      'attribute' => 'insert_date', 
      'dateStartAttribute' => 'date_start', 
      'dateEndAttribute' => 'date_end', 
      'dateStartFormat' => 'd-m-Y', 
      'dateEndFormat' => 'd-m-Y', 

     ] 
    ]; 
} 

et dans la méthode de recherche():

public function search($params) 
{ 
    // Some other filters 
    if($this->date_start && $this->date_end) { 
     // filtered query 
    } 
} 

Espérons que cela peut aider quelqu'un d'autre.