我注意到他們有很多不同的方法來編輯數據庫條目時傳遞一個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'));
}
}
}
形式我還需要形狀配合>輸入
但是,如何傳遞此信息?即使我有隱藏字段,它也不會確認用戶標識。請參閱OP瞭解我如何在網站上顯示用戶信息。 – Cameron 2011-05-09 21:50:16
@Cameron:我編輯並添加了更多細節。 – webbiedave 2011-05-09 21:52:55