CakePHP迁移导致编辑像添加一样

时间:2013-10-04 14:21:44

标签: php cakephp migration cakephp-2.0 cakephp-1.2

我有BlocksController和Block模型。在中,我使用了编辑操作来编辑应用程序的块,它运行正常。

迁移到1.3和2.x后,我注意到编辑操作导致将已编辑的块保存为新记录。

在cakePHP docs中,我读到1.3中表单的帮助器不再提供id,因此模型将该进程视为add。

为了解决这个问题,我尝试添加一个名为id的隐藏字段,其值正在编辑块的id,如下所示:

<?php echo $this->Form->create('Block', array('class' => 'nice custom'));?>
//The following line is required in cakephp 1.3+

<?php echo $this->Form->hidden('id', array('value' => $block['Block']['id']));?>

所描述的解决方案工作正常。 然而我需要了解另一种方法,而不必更改视图。有可能吗?

1 个答案:

答案 0 :(得分:2)

<强> TLDR

有很多方法可以达到你想要的效果。最理想的解决方案是将id添加到视图中,类似于您提到的方式。但是 - 你可以想到的选择很多。


在视图中

最简单的(我认为理想的)解决方案只是在视图中添加id。您应该可以像这样添加它:

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

它会自动隐藏,因为它是“id”,如果你正确地将数据传递给视图,它也应该为你填充。


在控制器中

但是 - 因为您的问题是如何在视图中执行,另一个选项是在Controller中执行此操作。我不知道您的确切项目,因此请根据需要进行更改,但在保存之前,您只需将阻止id附加到数据中即可。

$this->request->data['Block']['id'] = $YOUR_ID;
$this->Block->save($this->request->data);

在模型中

这似乎是一个奇怪的地方,但是 - 如果你将ID存储在会话或其他东西中,理论上你可以在保存前添加id。