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


etiennedewa
Auteur
Réponse acceptée

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 ...

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

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

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

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));

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

    $prefixes = Router::prefixes();

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.

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