2012-06-26 26 views
0

我希望我在CakePHP2中創建的表單在沒有發佈數據時顯示爲空,但如果會話密鑰Person.id存在,則使用模型中的數據填充。這裏是我的代碼:在會話中使用ID來填充CakePHP中的表單字段

function about() { 
    // Make session key for debug purposes 
    $this->Session->write("Person.id",1); 
    if($this->request->is('post')) { 
     debug("post"); 
    } else { 
     debug("not post"); 
     // Use the value in the session Person.id to find the 
     // record in the Person model 
     $this->params->data = $this->Person->findById($this->Session->read("Person.id")); 
    } 
} 

大部分上述工作。如果我訪問視圖時未發佈任何數據,則表單將按照預期從Person模型填充數據。

但是,如果我發佈表單,當我期待post時,仍然收到調試消息not post

如果我註釋掉分配數據到$this->params->data的行,則提交表單會給我正確的調試消息post,但我不明白爲什麼會發生這種情況。

如果有$this->params->data填充意味着相同的Cake作爲表單帖子,那麼我想如何檢查一個真正的,真正的表單帖子?

更新:如果我改變if($this->request->is('post'))if($this->request->data)那麼它的工作原理正是我希望它....但我仍然不明白爲什麼。

回答

1

在CakePHP2,當你與表單助手視圖創建一個表單,它automatically generates這一領域

<input type="hidden" name="_method" value="PUT"/> 
當你編輯記錄

(指其主鍵設置)。

當您提交表單時,此隱藏字段將覆蓋HTTP方法,並且您的請求不會被視爲POST,而會被視爲PUT。你可以更新您的測試是這樣的:

if($this->request->is('put')) { 
    ... 
} 

,或者反映您獲得當您使用bake

if($this->request->is('post') || $this->request->is('put')) { 
    ... 
} 

如果你想看到它自己,只是調試請求代碼:

debug($this->request); 

然後有點出了主題,但如果會話中的「Person.id」鍵是登錄用戶,那麼您可能使用自定義機制來登錄/註銷用戶,這可能是值得的看着AuthComponent

+0

很好的解釋,謝謝! Person.id實際上是一個查詢的結果,該查詢根據提交的電子郵件地址在「Person」模型中搜索記錄的「id」。我使用上面的代碼作爲多階段提交表單的一部分。數據在提交每個步驟時都會被放入數據庫中,但是如果用戶決定返回到之前的某個階段,我想要一種將數據提取回表單的方法。 – Joseph

相關問題