我有一个表单,用于编辑已保存到数据库的值。其中一个值是图像(以相对文件路径的形式)。我想在表单中创建一个链接,以便在单击时在单独的视图中显示图像。
我的问题是,将此视图的(编辑视图)图像字段数据传递给将独立显示图像的视图的控制器的最佳方法是什么?
我宁愿不通过网址来做。
答案 0 :(得分:2)
传递您正在编辑的记录的ID。然后在你的控制器中,你有一个像view_image($ id)这样的函数,它根据传入的$ id字段从数据库中获取图像的相对路径。
然后,您可以在view_image.ctp视图文件中显示所需的图像。
更新:
首先,对于你来说,问题是为什么你不想在网址中包含ID?有时人们会对公开展示ID感到不安全,但在大多数情况下,根本就没有问题。
无论如何,假设你有合法的需要不在URL中包含ID,另一种方法是通过POST传递id(或者那个问题的图像路径),而不是在URL中传递(得到)。你知道区别吗? GET包含URL中的参数,其中POST将它们包装在请求本身中,因此它们不在URL中。
如果你想要一个这样做的例子,CakePHP会在它的默认删除功能和由Bake控制台生成的链接的情况下执行。
在删除记录的情况下,以下是视图中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'));
}
所以你不应该觉得很难根据自己的目的进行调整。