2011-05-09 60 views
0

我注意到他們有很多不同的方法來編輯數據庫條目時傳遞一個ID到表單。因此,例如用於編輯用戶配置文件的形式,我有以下代碼:CakePHP通過ID編輯表格

function edit($id = null) 
{ 
    $this->layout = 'page'; 

    // this line isn't needed? 
    //$this->User->id = $id; 

    if (empty($this->data)) 
    { 
     $this->data = $this->User->read(); 
    } 
    else 
    { 
     if ($this->User->save($this->data)) 
     { 
      $this->Session->setFlash('Your profile has been updated', 'flash', array('header' => 'Announcement', 'myclass' => 'success')); 
      $this->redirect(array('controller' => 'users', 'action' => 'view', $id)); 
     } 
    } 
} 

現在函數需要一個id傳入網址,例如: /users/edit/2但是,讓我們說我希望它是更像用戶友好的東西,例如/profile/edit(通過路由重寫)我不再傳遞ID作爲URL的一部分。正如你可以在我的代碼中看到的,我有一條線我已經註釋掉了,因爲它不是必需的?

另外在表格中我也需要<?php echo $this->Form->input('id', array('type' => 'hidden')); ?>爲什麼?

基本上這是更多的選項可用於我建立各種類型的編輯窗體和傳遞數據的形式。如果數據通過URL或其他方式傳遞,需要隱藏字段

我也注意到在一些網站上他們有類似於表單鍵和存儲在用戶名中的用戶名頁眉中的meta標籤?

編輯:

public function beforeFilter() 
{ 

     $this->set('authUser', $this->Auth->user()); 

     // 

     $user = $this->Auth->user(); 

     if (!empty($user)) 
     { 
      Configure::write('User', $user[$this->Auth->getModel()->alias]); 
     } 

} 

public function beforeRender() 
{ 
    $user = $this->Auth->user(); 

    if (!empty($user)) 
    { 
     $user = $user[$this->Auth->getModel()->alias]; 
    } 
    $this->set(compact('user')); 
} 


// NEW VERSION 
function settings() 
    { 
     $this->layout = 'page'; 

     $this->set('title_for_layout', 'Edit Profile'); 

     $this->User->id = $user['id']; 

     if (empty($this->data)) 
     { 
      $this->data = $this->User->read(); 
     } 
     else 
     { 
      if ($this->User->save($this->data)) 
      { 
       $this->Session->setFlash('Your settings have been updated', 'flash', array('myclass' => 'success')); 
       $this->redirect(array('controller' => 'users', 'action' => 'settings')); 
      } 
     } 
    } 
形式我還需要形狀配合>輸入

回答

2

另外( 'ID',數組 ( '類型'=> '隱藏')); ?>爲什麼?

具有id隱藏在形式消除了你的控制器動作抓取從URI(作爲參數傳遞又名)的$id的需要。在表格中時,它將自動放入您的$data陣列中。

是什麼形式需要的隱藏字段 如果數據被 通過URL或某些 其他方式通過任何

這是沒有必要的形式,如果是從uri。您只需抓住$id並將其分配給用戶模型(如註釋掉的代碼所做的那樣)。

比方說,我想它是什麼 更加用戶友好喜歡/型材/編輯

我認爲,當用戶編輯自己的個人資料,這將是。在這種情況下,您的系統應該能夠通過會話檢索用戶的ID。

+0

但是,如何傳遞此信息?即使我有隱藏字段,它也不會確認用戶標識。請參閱OP瞭解我如何在網站上顯示用戶信息。 – Cameron 2011-05-09 21:50:16

+0

@Cameron:我編輯並添加了更多細節。 – webbiedave 2011-05-09 21:52:55