CakePHP传递id来编辑表单

时间:2011-05-09 21:34:49

标签: php 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));
        }
    }
}

现在该函数需要在URL中传递id,例如/users/edit/2但是,我想说它希望它更像用户友好的/profile/edit(通过路由重写)我将不再作为URL的一部分传入ID。正如你在我的代码中看到的那样,我有一条我已注释掉的行,因为它不需要?

同样在表格中我还需要<?php echo $this->Form->input('id', array('type' => 'hidden')); ?>为什么?

基本上,这是我可用于构建各种类型的编辑表单和将数据传递到表单的更多选项。如果数据是通过URL或其他方式传递的,那么表单中隐藏字段的需求是什么

我也注意到在某些网站上他们有像表格键和用户名存储在页面标题中的元标记中的内容???

编辑:

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'));
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

  

同样在表格中我也需要表格 - >输入('id',   array('type'=&gt;'hidden')); ?&GT;为什么呢?

如果表单中隐藏了id,则无需控制器操作从uri中获取$id(也称为参数传递)。在表单中,它会自动放入您的$data数组中。

  

对隐藏字段的需求是什么   在数据存在的形式   通过URL或一些传递   其他方式

如果可以从uri获得,则不需要表单。您只需抓取$id并将其分配给用户模型(如注释掉的代码所示)。

  

让我们说我希望它成为一种东西   更加用户友好,如/ profile / edit

我假设用户正在编辑自己的个人资料。在这种情况下,您的系统应该能够通过会话检索用户的ID。