如何在Yii中禁用更新字段

Str*_*der 4 php yii

我想在用户更新时禁用或使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)

但不明白为什么这会显示错误.

Jon*_*Jon 7

验证规则毫无意义.

该错误消息告诉您缺少验证程序名称:

 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)