CakePhp Routes & Session Variables - PullRequest
0 голосов
/ 01 июля 2010

Есть ли внутренняя причина, по которой я не могу, в rout.php, направить пользователя на основе содержимого переменной сеанса?например,

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

работает нормально, но замена 1 на $ _SESSION ['userid'] - нет.

Я что-то упустил из-за переменных сеанса здесь?

Альтернативные предложения по перенаправлению вошедшего в систему пользователя из / dashboard в / controller / view / $ userid без использования переменной сеанса также будут приветствоваться!

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

Сессия еще не началась, когда маршруты проанализированы.Если вы используете обработку сеансов в 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 голос
/ 01 июля 2010

Если метод dash должен извлекать и отображать запись пользователя, тогда вместо того, чтобы принимать идентификатор пользователя в качестве аргумента, вы можете получить идентификатор пользователя, вошедшего в систему в данный момент, из компонента Auth .

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

Если необходимо, вы можете загрузить компонент Session с помощью App::import().

...