CakePhp路线&会话变量

时间:2010-06-30 21:54:08

标签: cakephp routes session-variables

在routes.php中,我是否有根据会话变量内容路由用户的内在原因? e.g。

Router::connect('/dashboard',
    array('controller'=>'users','action'=>'dash',1)
);

工作正常,但是,用$ _SESSION ['userid']替换1则不行。

我在这里遗漏了一些关于会话变量的重要内容吗?

将登录用户从/ dashboard重新路由到/ controller / view / $ userid而不使用会话变量的替代建议同样值得赞赏!

2 个答案:

答案 0 :(得分:3)

解析路由时,会话尚未启动。如果你正在使用Cake的会话处理,它们是由Session组件启动的,它只与控制器一起加载,这在路由后发生。

您也不应该使路由动态,因为它们用于反向路由:

Router::connect('/dashboard', array('controller'=>'users', 'action'=>'dash'));
$html->link('…', array('controller'=>'users', 'action'=>'dash'));
// -> /dashboard

如果你让它变得动态,这将无法按预期工作:

Router::connect('/dashboard',
    array('controller'=>'users', 'action'=>'dash', $_SESSION['user']));

$html->link('…', array('controller'=>'users', 'action'=>'dash', 1));
// -> /dashboard

$html->link('…', array('controller'=>'users', 'action'=>'dash', 2));
// -> /users/dash/2

路线应该是静态的。路由定义应用程序URL架构,如地图。它根本不是做任何“实际工作”的地方。动态的一切都发生在控制器中。

答案 1 :(得分:1)

如果破解方法应该检索并显示用户的记录,那么您可以从Auth component中检索当前登录用户的ID,而不是将用户ID作为参数。

function dash() {
    $user_id = $this->Auth->user('id');
    // ...
}

如果必须,您可以使用App::import()加载会话组件。