蛋糕PHP表单创建函数:缺少id


CakePHP form create function: missing id

(CakePHP 2.1, CentOS) 嘿伙计们 - 所以我在CakePHP中做了一些简单的事情。我使用 FormHelper 类从我的 edit.ctp 视图中启动一个窗体,使用熟悉的调用:

echo $this->Form->create();

当我去mycoolsite/posts/edit/17时,标记包含

<form action="/posts/edit/17"

这是意料之中的。现在,当我指定模型和 url 时,如下所示,

echo $this->Form->create('Post', array('url' =>  '/posts/edit'));

并再次转到mycoolsite/posts/edit/17,我在标记中得到了这个表单标签,该标签缺少操作中的"/17":

<form action="/newsite/posts/edit"

这正常吗?我可以发誓,即使您显式指定 url 参数,创建函数也会自动将记录 ID 附加到操作中。

不要忘记在以下形式中添加 id:

echo $this->Form->create('Post');
echo $this->Form->input('id');
...

然后一切都按应有的方式工作 - 并且记录在案。

如果没有必要,请不要破坏 url。它将自行发布给自己:)您在那里做什么会导致预期的行为:您用无效的 url 覆盖要发布到的 URL。

另请注意,为了提高灵活性,您应该始终首选数组语法而不是字符串。不,它不会神奇地将 id/字符串添加到字符串 URL 中。

编辑:如果您每个操作有多个表单,则不必使用不同的URL来发布。只有不同的表单/ID才能使它们唯一(可能还包含一个唯一的表单字段,其中包含它应该做的"动作"并区分表单)。但是,如果您确实想要不同的目标 URL,请确保以有效的方式生成它们:

echo $this->Form->create('Post', array('url' => array('action' => 'edit', $id)));

$id是从读取记录的控制器传递的值,并在此处使用其 id 值使用完整的 url(包括缺少的 id)填充表单。

答:在深入研究了 FormHelper 类的源代码后,我确定这是预期行为。如果 url 没有通过 FormHelper 的 create() 函数中的选项数组传入,则代码通过以下方便的调用确定表单的操作:

$this->url( $this->request->here(false) )

您可以在 FormHelper 类的任何扩展中使用此代码,这就是我正在做的事情。无论如何,这就是解决我的问题的原因。