我想在用户更新时禁用或使readOnly成为一个字段,即username.当注册用户更新他们的信息时,他们将看到该用户名被禁用.我尝试基于这个答案,但它对我不起作用,而是给出了User has an invalid validation rule. The rule must specify attributes to be validated and the validator name.
我在规则中写的错误:
array('username', 'readOnly'=>true, 'on'=>'update'),
Run Code Online (Sandbox Code Playgroud)
并以形式:
echo $form->textFieldRow($model,'username',array(
'class'=>'span5',
'maxlength'=>45,
'readOnly'=>($model->scenario == 'update')? true : false
));
Run Code Online (Sandbox Code Playgroud)
但不明白为什么这会显示错误.
验证规则毫无意义.
该错误消息告诉您缺少验证程序名称:
array('username', 'ValidatorNameGoesHere', 'readOnly'=>true, 'on'=>'update'),
Run Code Online (Sandbox Code Playgroud)
但即使你为验证器名称填写了一些东西,它仍然无法工作,因为Yii中没有具有readOnly属性的验证器; 此角色由safe属性扮演.
在以安全方式更新时(即用户无法覆盖的字段)使某些字段为只读意味着您必须查看提交的数据,独立确定数据是否包含现有模型的PK(告诉您是否您正在添加或更新)并基于此设置模型的方案.如果不这样做,您的用户可以轻松地操纵发送到服务器的HTTP请求并绕过只读逻辑.
设置方案后,您可以使用几个规则轻松强制执行只读逻辑:
array('username', 'safe', 'except'=>'update'),
array('username', 'unsafe', 'on'=>'update'),
Run Code Online (Sandbox Code Playgroud)