我对Yii验证有疑问。我有一个下拉列表,其选项为Y和N.如果用户选择Y,用户必须解释他选择Y的原因,因此需要textArea框。
我的规则代码如下所示。
array('explain', 'check', 'trigger'=>'med_effects'),
检查是我用于验证的功能
public function check($attribute, $params)
{
if($this->$params['trigger'] == 0 && $this->$attribute == '') {
$this->addError($attribute, 'Explain the effects of the medicine');
}
}
$this->$params['trigger']
的值不会改变。我假设因为保存的值为0(Y)并且即使用户选择N也不会改变。我如何确定用户在对表格求和时选择了哪个选项?
感谢。
答案 0 :(得分:4)
在模型中创建一个属性:
public $isDropDownChecked;
在您的视图中,创建一个连接到新属性的下拉列表。
并在方法规则()中返回一系列规则,如下所示:
public function rules()
{
$rules[] = array();
if ($this->isDropDownChecked == 'Y')
$rules[] = array('explain', 'check', 'trigger'=>'med_effects');
return $rules;
}
答案 1 :(得分:0)
这也可能对 Yii1 上的某人有所帮助, 假设您有三个字段的 [Yes|NO] 查找,并且您希望至少选择一个字段为 Yes
这是解决方案 在您的模型上添加
public $arv_refill;
public $prep_refilled;
public $prep_initiate;
在你的规则上添加
public function rules()
{
return array(
array('arv_refill,prep_refilled,prep_initiate','arvPrepInitiateValidation'),
);
}
arvPrepInitiateValidation 是一个函数
public function arvPrepInitiateValidation($attribute_name,$params)
{
if($this->arv_refill != 1 && $this->prep_refilled != 1 && $this->prep_initiate != 1){
$msg = "arv_refill, prep_refilled or prep_initiate field must have one field as Yes";
$this->addError('arv_refill',$msg);
$this->addError('prep_refilled',$msg);
$this->addError('prep_initiate',$msg);
}
}