如何减少CakePHP中的表单代码重复

Eri*_*k L 5 cakephp

我在CakePHP中有一个表单,里面有几十个字段.从我看到的所有示例中,添加视图和编辑视图都有重复的表单代码.

是否有任何技巧可以防止重复?CakePHP中最好的方法是什么?

kak*_*lon 14

我所做的是将所有表单字段放在一个元素中,然后将该元素插入add.ctp和edit.ctp中

不要忘记在edit.ctp中添加带有id的隐藏字段

这样,所有可见元素都在一个文件中,更易于维护.

View/MyModel/add.ctp
echo $this->Form->create('MyModel');
echo $this->element('my_form'); 
echo $this->Form->end();

View/MyModel/edit.ctp
echo $this->Form->create('MyModel');
echo $this->Form->input('id');
echo $this->element('my_form'); 
echo $this->Form->end();

View/Elements/my_form.ctp
// your form inputs
// whatever they are
Run Code Online (Sandbox Code Playgroud)


Ish*_*Ish 7

你应该合并这些意见,因为添加/编辑是不同的动作,值得单独的视图文件.随着应用程序的增长,您将意识到拥有单独的视图可以降低复杂性if else conditions.

如果您仍想避免使用单独的文件,请使用

function add() {
    .....
    $this->render('edit')
}
Run Code Online (Sandbox Code Playgroud)


Leo*_*Leo 6

我以前做过这个,但又回到了单独的观点,主要是为了我自己的理智.

这很容易做到.编辑需要输入记录ID.这通常是隐藏的.添加表单的任何默认表单值都必须包含在条件中,以便在编辑记录时不会使用默认值覆盖存储的值

在控制器方面,您需要一个条件语句来决定是否作为添加或编辑,具体取决于是否$this->data['MyModel']['id']设置.

我认为这涵盖了它 - 如果我想到其他任何我会添加它.

我的工作模式往往是构建编辑视图,然后复制并粘贴以创建添加视图的基础.