Configuration routes CakePHP

Par etiennedewa, il y a 11 ans


Bonjour,
J'ai besoin d'aide pour la configuration de routes sous CakePHP 2.5.6
Je voudrais créer une application pour plusieurs établissements et je voudrais avoir une url de ce type :

/etablissement/admin?/controller/action/*

Avez vous une idée ? Et comment faire pour que les liens que l'on génère depuis les vues passenettomatiquement le paramètre etablissement ?

Merci pour votre aide

8 réponses

leknoppix, il y a 11 ans

Bonjour
Tu veux avoir une de ce genre:
/etablissement/admin/controller/action/lycee-jean-jaures-paris-16
?

Pour cela, tout dépend de tes controllers....

Je pense à ceci:

Router::connect('/etablissement/admin/posts/:action/:id-:etablissement.html', array('controller' => 'posts', 'admin' => true), array('pass' => array('id','etablissement'), 'etablissement' => '[0-9a-z\-]+'));

Je pense que c'est un bon départ.
leknoppix

etiennedewa, il y a 11 ans

Bonsoir,
J'ai un peu avancé et j'en suis arrivé là :

$prefixes = Router::prefixes(); foreach ($prefixes as $prefix) { $params = array('prefix' => $prefix, $prefix => true); $indexParams = $params + array('action' => 'index'); Router::connect("/:etab/{$prefix}", $indexParams + array('controller' => 'home')); Router::connect("/:etab/{$prefix}/:controller", $indexParams); Router::connect("/:etab/{$prefix}/:controller/:action/*", $params); } $indexParams = array('action' => 'index'); Router::connect("/:etab", $indexParams + array('controller' => 'home')); Router::connect("/:etab/:controller", $indexParams); Router::connect("/:etab/:controller/:action/*", array());

Mais je voudrias que si le paramètre etab est defini, il soit automatiquement ajouté lors qu'on créé un lien, car pour l'instant on est obligé de faire :

$this->Html->link('Lien', array('controller' => 'c', 'action' => 'index', 'etab' => $etab));

Et ça pour tous les liens et c'est pas très pratique ...

leknoppix, il y a 11 ans

Si je comprend bien, tu fais une boucle foreach pour réaliser un router différent pour chaque préfixe, c'est bien cela?

etiennedewa, il y a 11 ans

Oui c'est ça, c'est pour pas réécrire toutes les routes si je rajoute un préfixe.

leknoppix, il y a 11 ans

Je pense que cela ne marchera pas. Dans la doc de cakephp (http://book.cakephp.org/2.0/fr/development/routing.html)
Regarde de ce coté.

Router::connect("/{$prefix}/:plugin/:controller", array('action' => 'index', 'prefix' => $prefix, $prefix => true));
etiennedewa, il y a 11 ans

Oui juste comme ça, ça marche pas il faut récupérer la liste des préfixes.

$prefixes = Router::prefixes();
leknoppix, il y a 11 ans

Ben non, regarde la doc, car avec le foreach, cela n'automatisera pas la création des router::connect.
Pour moi, le foreach est à abandonné. Avec les $prefix, cela permet d'automatiser sans foreach.

etiennedewa, il y a 11 ans

Bah avec mon foreach ça marche et $prefix n'est pas défini par défaut ...