2013-02-21 170 views
0

我有一个窗体显示用于编辑已保存到数据库的值。其中一个值是图像(以相对文件路径的形式)。我想在表单中创建一个链接,以在点击时在单独的视图中显示图像。将数据从视图传递到Cakephp中的不同视图控制器

我的问题是什么是将视图的(编辑视图)图像字段数据传递给视图控制器的最佳方式,该视图将独立显示图像?

我宁愿不通过网址。

+0

不知道为什么你不想通过网址来完成,在你展示的视图中,你可能需要登录。此外,您可以在窗体上显示图像,或者当他们在链接上查看图像时,可以在模式窗口或其他位置弹出图像。 – jimiyash 2013-02-22 01:52:58

+0

所有不错的建议。谢谢!所有选项都在此评论和下面接受的答案中进行总结。在当前页面上显示内容,通过url传递内容的ID或将具有所需数据库内容的表单发布到外部视图。 – BIOS 2013-02-22 05:03:19

回答

2

传递您正在编辑的记录的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')); 
} 

所以,你不应该”不要为了你自己的目的去适应它。

+0

但是你通过url传递id的权利?通过$ this-> Html-> link()?有没有办法做到这一点,而不通过网址? – BIOS 2013-02-21 22:36:25

+0

将URL存储在会话变量中并在另一个视图中使用该URL? – thaJeztah 2013-02-21 22:54:39

+0

我不会涉及会议,这可能是矫枉过正。我已经用更多信息更新了我的答案。基本上,使用Cake的表单助手的postLink方法 - http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::postLink – 2013-02-21 23:09:03

相关问题