2010-06-30 8 views
0

Y at-il une raison intrinsèque pour laquelle je ne peux pas, dans routes.php, router un utilisateur en fonction du contenu d'une variable de session? par exemple.Routes CakePhp et variables de session

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

fonctionne bien, mais ne remplace pas le 1 avec $ _SESSION ['userid']. Ai-je quelque chose d'important à propos des variables de session ici?

D'autres suggestions de redirection d'un utilisateur connecté de/dashboard vers/controller/view/$ userid sans utiliser de variable de session seraient également appréciées!

Répondre

3

La session n'a pas encore démarré lorsque les routes sont analysées. Si vous utilisez la gestion des sessions de Cake, elles sont démarrées par le composant Session, qui ne se charge qu'avec un contrôleur, ce qui se produit après le routage.

Vous ne devriez pas faire des itinéraires dynamiques non plus, car ils sont utilisés pour le routage inverse:

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

Si vous souhaitez faire cette dynamique, cela ne fonctionne plus comme prévu:

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 

Les routes doivent être statiques. Les routes définissent le schéma d'URL de votre application, comme une carte. Ce n'est tout simplement pas l'endroit pour faire un "vrai travail". Tout ce qui est dynamique se passe dans les contrôleurs.

1

Si la méthode de tiret est supposée récupérer et afficher l'enregistrement de l'utilisateur, alors au lieu de prendre l'ID utilisateur en tant qu'argument, vous pouvez récupérer l'ID de l'utilisateur actuellement connecté à partir du .

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

Si vous devez, vous pouvez charger le composant de session avec App::import().

+0

Je pense que vous êtes sensé déplacer le problème à l'intérieur de la fonction. Je n'ai pas encore beaucoup utilisé le composant Auth (peut-être que je devrais l'étudier plus avant?) Mais cela pourrait être une solution rapide pour moi: fonction dash ($ id) { if (vide ($ id)) $ id = $ _SESSION ["userid"]; ... } Je suis toujours curieux de savoir pourquoi les variables de session et routes.php ne veulent pas se mélanger ... – thesunneversets

Questions connexes