Cakephp没有路由到正确的url,留下url param为空

时间:2012-02-13 21:53:36

标签: url-routing cakephp-2.0

我正在尝试为我登录的用户设置视图。我从cakephp 2.0手册中解除了代码。这是控制器代码:

public function view($id = null) {

    $this->User->id = $id;
    if (!$this->User->exists()) {
        throw new NotFoundException(__('Invalid user'));
    }

    $this->set('user', $this->User->read(null, $id));
}

当user_id为1的用户登录时,cake不会转到/ users / 1。相反,它只是去/ users / view。以下是与用户控制器有关的路由:

Router::connect('/users', array('controller' => 'users', 'action' => 'login'));
Router::connect('/users/:action', array('controller' => 'users'));
Router::connect('/users/:id', array('controller' => 'users', 'action' => 'view'));

我不确定我错了,路线代码或控制器代码。

更新新控制器功能:

public function view($id = null) {

    $this->User->id = $id;
    if (!$this->User->exists()) :
        throw new NotFoundException(__('Invalid user'));

    elseif($this->Auth->login()) :
return $this->redirect(array('controller' => 'users', 'action' => 'view', AuthComponent::user('id')));

    endif;
    $this->set('user', $this->User->read(null, $id));
}

1 个答案:

答案 0 :(得分:1)

成功登录后,页面打开的页面是未经身份验证的用户最初尝试打开的页面或(App)控制器中Auth组件的loginRedirect属性中设置的操作。同样documented here。换句话说,上面的代码与您描述/请求的行为无关。

在这种情况下,由于user_id仅在成功登录后可用(因此无法在loginRedirect中设置),因此您需要在UsersController中调整登录操作,以便成为以下几行:

if ($this->Auth->login()) {
    return $this->redirect(array('controller' => 'users', 'action' => 'view', AuthComponent::user('id'));
}