将数据从视图传递到Cakephp中的不同视图控制器
我有一个窗体显示用于编辑已保存到数据库的值。其中一个值是图像(以相对文件路径的形式)。我想在表单中创建一个链接,以在点击时在单独的视图中显示图像。将数据从视图传递到Cakephp中的不同视图控制器
我的问题是什么是将视图的(编辑视图)图像字段数据传递给视图控制器的最佳方式,该视图将独立显示图像?
我宁愿不通过网址。
传递您正在编辑的记录的ID。然后在你的控制器中,你会有一个像view_image($ id)这样的函数,它根据传入的$ id字段从数据库中获取图像的相对路径。
然后,您可以显示图像view_image.ctp视图文件。
UPDATE:
第一和formeost,问题是你为什么不希望在URL中包含的ID?有时候,人们对公开显示身份证件感到不安全,但在大多数情况下,根本没有问题。
无论如何,假设你有一个合法的需要不在URL中包含ID,另一种方法是通过POST传递id(或图像路径),而不是在网址(GET)。你知道区别? GET将参数包含在URL中,其中POST将它们包装在请求本身中,所以它们不在URL中。
如果您想要这样做的一个示例,CakePHP会在默认情况下执行它,以删除由烘焙控制台生成的函数和链接。
在删除记录的情况下,这里的视图中的POST链接的例子:
echo $this->Form->postLink(__('Delete'), array('action' => 'delete', $product['Product']['id']),array('class'=>'delete'), __('Are you sure you want to delete %s?', $product['Product']['list_title']));
而且例如控制器方法是这样的:
public function admin_delete($id = null) {
if (!$this->request->is('post')) {
throw new MethodNotAllowedException();
}
$this->Product->id = $id;
if (!$this->Product->exists()) {
throw new NotFoundException(__('Invalid product'));
}
if ($this->Product->delete()) {
$this->Session->setFlash(__('Product deleted'));
$this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Product was not deleted'));
$this->redirect(array('action' => 'index'));
}
所以,你不应该”不要为了你自己的目的去适应它。
但是你通过url传递id的权利?通过$ this-> Html-> link()?有没有办法做到这一点,而不通过网址? – BIOS 2013-02-21 22:36:25
将URL存储在会话变量中并在另一个视图中使用该URL? – thaJeztah 2013-02-21 22:54:39
我不会涉及会议,这可能是矫枉过正。我已经用更多信息更新了我的答案。基本上,使用Cake的表单助手的postLink方法 - http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::postLink – 2013-02-21 23:09:03
不知道为什么你不想通过网址来完成,在你展示的视图中,你可能需要登录。此外,您可以在窗体上显示图像,或者当他们在链接上查看图像时,可以在模式窗口或其他位置弹出图像。 – jimiyash 2013-02-22 01:52:58
所有不错的建议。谢谢!所有选项都在此评论和下面接受的答案中进行总结。在当前页面上显示内容,通过url传递内容的ID或将具有所需数据库内容的表单发布到外部视图。 – BIOS 2013-02-22 05:03:19