2010-06-30 2 views
0

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

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

работает нормально, но, заменяя 1 с $ _SESSION [ 'USERID'] не.

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

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

ответ

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

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

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

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

+0

Я думаю, что вы разумно переместить проблему внутри функции. Я еще не использовал компонент Auth (возможно, мне следовало бы изучить его дальше?), Но это может быть быстрым решением для меня: function dash ($ id) { if (empty ($ id)) $ id = $ _SESSION [ 'идентификатор пользователя']; ... } Мне все еще интересно, почему переменные сеанса и route.php не хотят смешивать ... – thesunneversets

Смежные вопросы