2017-08-22 2 views
0

J'ai une liste déroulante avec une autre option avec un champ de texte. Maintenant je veux valider à la fois dropdownlist et text-field. La validation s'applique selon la sélection, c'est-à-dire la liste déroulante ou le champ de texte. Comment puis-je l'appliquer?Yii2 dropdownlist avec autre validation d'option

Année provenant de dopedown. Ici j'ai id

['year', 'integer'], 

Ou proviennent du champ de texte. Ici, j'ai année

['year', 'integer', 'min' => 1900, 'max' => date('Y')], 
+0

Vous devriez toujours valider de la même manière - dans la liste déroulante vous pouvez envoyer toute valeur que vous voulez, tout comme dans le champ de texte. – Yupik

Répondre

0

A cet effet, vous pouvez utiliser sceanrio dans la validation yii2. Par exemple:

class User extends ActiveRecor{ 
const SCENARIO_INPUT = 'text_inpu'; 
const SCENARIO_DROPDOWN = 'dropdown_list'; 
public function scenarios(){ 
    $scenarios = parent::scenarios(); 
    $scenarios[self::SCENARIO_INPUT]; 
    $scenarios[self::SCENARIO_DROPDOWN]; 
    return $scenarios;} 

public function rules(){ 
    return [[['year'], 'integer', 'on' => self::SCENARIO_DROPDOWN], 
      [['year'], 'integer', 'min' => 1900, 'max' => date('Y') 'on' => self::SCENARIO_DROPDOWN]];}} 
0

Dans votre cas, vous devez écrire une fonction de validation personnalisée dans votre modèle et utiliser une autre variable pour l'année de capture du champ texte. Votre code de modèle devrait:

use yii\base\Model; 

class YourModel extends Model 
{ 
    // use variable for capture year in text field 
    public $year_as_other; 

    public function rules() 
    { 
    return [ 
     // an inline validator defined as the model method validateYear() 
     ['year', 'validateYear'], 
     ['year_as_other' , 'safe'], 
    ]; 
} 

public function validateYear($attribute) 
{ 
    if($this->year == 'other' && ($this->year_as_other < 1900 || $this->year_as_other > date('Y'))) 
    { 
    $this->addError($this->year_as_other , 'Invalid Year'); // your error message 
    } 
    elseif($this->year < 1900 || $this->year > date('Y')) 
    { 
     $this->addError($this->year , 'Invalid year');// your error message 
    } 
} 
}