2013-02-21 166 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

相關問題