我显示了一个表单,用于编辑已保存到数据库中的值。其中一个值是图像(以相对文件路径的形式)。我想在表单中创建一个链接,以便在单击时在单独的视图中显示图像。
我的问题是将这个视图的(编辑视图)图像字段数据传递给将独立显示图像的视图控制器的最佳方法是什么?
我宁愿不通过 url 来做。
传递您正在编辑的记录的 ID。然后在你的控制器中,你会有一个类似 view_image($id) 的函数,它根据传入的 $id 字段从数据库中获取图像的相对路径。
然后,您可以在 view_image.ctp 视图文件中显示所需的图像。
更新:
首先,问题是您为什么不想在 URL 中包含 ID?有时人们对公开出示身份证感到不安全,但在大多数情况下,这完全没有问题。
无论如何,假设您有合法的不需要在 URL 中包含 ID,另一种方法是通过 POST 传递 id(或图像路径),而不是在 URL (GET) 中. 你知道区别吗?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'));
}
因此,您不应该发现将其用于您自己的目的太难了。