我有一个下拉列表,其他选项有文本字段。现在我想验证下拉列表和文本字段。验证根据选择(即下拉列表或文本字段)进行应用。我该如何应用呢。
年来自掺杂。我有id
['year', 'integer'],
或者来自文本字段。我有一年
['year', 'integer', 'min' => 1900, 'max' => date('Y')],
答案 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
}
}
}