Yii2下拉列表以及其他选项验证

时间:2017-08-22 14:02:47

标签: yii yii2 yii2-advanced-app

我有一个下拉列表,其他选项有文本字段。现在我想验证下拉列表和文本字段。验证根据选择(即下拉列表或文本字段)进行应用。我该如何应用呢。

年来自掺杂。我有id

['year', 'integer'],

或者来自文本字段。我有一年

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

2 个答案:

答案 0 :(得分:0)

为此,您可以在yii2验证中使用sceanrio。 例如:

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]];}}

答案 1 :(得分:0)

在您的情况下,您需要在模型中编写自定义验证函数,并在文本字段中使用另一个变量作为捕获年份。您的型号代码应该如下:

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
   }
 }
}