我有一个下拉列表,其中包含其他选项具有文本字段。 现在我想验证下拉列表和文本字段。根据选择(即下拉列表或文本字段(进行验证。我该如何应用它。
年来自兴奋剂。在这里我有id
['year', 'integer'],
或来自文本字段。在这里我有年份
['year', 'integer', 'min' => 1900, 'max' => date('Y')],
为此,您可以在 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]];}}
在您的情况下,您需要在模型中编写自定义验证函数,并使用另一个变量从文本字段捕获年份。您的模型代码应如下所示:
use yiibaseModel;
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
}
}
}