Cakephp表单 - 有没有办法让字段只读(在视图中)

Mic*_*kay 5 cakephp

我有一个Cakephp 1.3表单,允许用户编辑配置文件数据.但是表格中的一些信息需要只读(有时).

我唯一的选择是在只读的情况下回显和格式化字段内容,或者在Cake表单中是否有允许只读字段的标志.理想情况下,只读字段将与其他接口类似地显示为灰色.

    echo $this->Form->create('User', array('url' => array('controller' => 'User', 'action'=>'editUser')));

    echo $this->Form->input('id', array('type'=>'hidden'));

If (!isset($IsAdmin)) {
    // Only display username - read only! Add code here
    echo $this->Form->input('username', array('label' => __d('users', 'User',true)));
} else {
    // Admins can edit user names
    echo $this->Form->input('username', array('label' => __d('users', 'User',true)));
}           

 ... more fields here

    echo $this->Form->end(__d('users', 'Submit',true));
Run Code Online (Sandbox Code Playgroud)

tha*_*tah 23

您可以向options数组添加一个'disabled'键,但是要意识到这只是表单的前端/表示,人们将能够覆盖输入字段的'disabled'属性并修改其值.

为了防止保存不需要的更改,您需要在使用模型保存数据时指定"fieldList"

输出禁用的表单字段;

echo $this->Form->input('fieldname', array('type'=>'hidden', 'disabled' => 'disabled'));
Run Code Online (Sandbox Code Playgroud)

然后,在保存数据时,指定一个字段列表(文档:http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Models.html#saving-your-data)

$this->MyModel->save($this->data, true, array('field1', 'field2'));
Run Code Online (Sandbox Code Playgroud)

字段列表应包括允许用户更新的所有字段


小智 18

disabled属性很好但实际上,输入字段具有'readonly'属性.并且听起来你希望仍然向用户显示该字段,因此使用"隐藏"并不能真正解决您想要做的事情.

这是另一种选择(实际上特别针对"只读"的要求):

echo $this->Form->input('fieldname', array('readonly' => 'readonly'));
Run Code Online (Sandbox Code Playgroud)

我发现使用禁用可以阻止jquery点击触发器从触发到readonly仍然触发,例如使用bootstrap datepicker文本字段

这是WC3的链接:http://www.w3schools.com/tags/att_input_readonly.asp

  • 在许多情况下,此readonly属性是更好的选择."禁用"字段可能无法提交其包含的数据. (2认同)

sum*_*mit 5

如果你真的想让一个字段只读为什么要使用表单字段,只需回显该值,就可以用简单的javascript或firebug轻松更改表单字段的disable或readonly属性.