在routes.php中,我是否有根据会话变量内容路由用户的内在原因? e.g。
Router::connect('/dashboard',
array('controller'=>'users','action'=>'dash',1)
);
工作正常,但是,用$ _SESSION ['userid']替换1则不行。
我在这里遗漏了一些关于会话变量的重要内容吗?
将登录用户从/ dashboard重新路由到/ controller / view / $ userid而不使用会话变量的替代建议同样值得赞赏!
答案 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()
加载会话组件。