在 cakephp 中硬编码表单输入字段,以便用户无法编辑它?



我在cakephp中以注册形式有以下表单字段。我想将其"硬编码",因此用户无法编辑

echo $form->input('name', array('label' => __('Name *', true)));

然后不要将其添加到表单中。这些字段应添加到控制器(甚至是vertervalidate/beforesave模型层)中,然后在保存之前:

if ($this->request->is('post')) {
    $this->User->create();
    // add the content before passing it on to the model
    $this->request->data['User']['status'] = 1;
    if ($this->User->save($this->request->data)) {
        ... 
    }
}

请参阅此处的"默认值 - 隐藏"。

您可以设置readonly属性:

echo $form->input('name', array('label' => __('Name *', true), 'readonly' => true));

但是,这仅影响UI,因此您仍然必须应用Mark的答案,以确保用户不会更改该值。

两个选项:

  1. 硬代码保存之前的值
  2. 使用白色列表

如果您希望该字段是一个只读的字段,从设置的那一刻起。使用白色列表。这样 - 用户是否会提交字段都没关系。蛋糕不会保存。

$white_list = array('title', 'category');
$this->Model->save($data,$validate,$white_list);

另一个解决方案是标记编码:

$this->request->data['User']['status'] = 1;
if ($this->User->save($this->request->data)) {
... 
}

任何解决方案都应混合UI指示,表明该字段不会更改。良好的UX不允许在第一名中。

最新更新