Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-10-2008 16:23:45

cr0cK
Membre
Date d'inscription: 10-07-2008
Messages: 14

Routes par défaut qui prime sur tout le reste

Bonjour,

J'ai un prob de routes.

J'ai une route par défaut qui redéfinit mes urls comme cela :
/type_acces/module/controller/action

Ex : http://domaine.fr/public/cms/article/list

Voici le code :

Code:

$front->getRouter()->addRoute(
    'default',
    new Zend_Controller_Router_Route(
        '/:access/:module/:controller/:action/*',
        array (
            'access' => 'public',
            'module' => 'default',
            'controller' => 'index',
            'action' => 'index'
        )
    )
);

J'ai envie d'ajouter une route (simple pour l'instant) qui traduit :
/section/1

en /public/cms/get-public-articles/id-section/1.

Mais là, j'ai une erreur qui me dit qu'aucun module est définit. Si je regarde les param _request, j'ai :

Code:

array(5) {
    ["access"] => string(7) "section"
    ["module"] => string(1) "1"
    ["controller"] => string(5) "index"
    ["action"] => string(5) "index"
    ...
}

Code de la route :

Code:

$route = new Zend_Controller_Router_Route(
    'section/:id-section',
    array(
        'access' => 'public',
        'module' => 'cms',
        'controller' => 'section',
        'action'     => 'get-public-articles'
    )
);
$front->getRouter()->addRoute('section', $route);

Donc on voit bien que c'est la route default qui prime et il tient pas compte de la 2eme.

Si je commente la route par défaut, ça marche.

J'ai pensé à un ordre de chargement des routes, mais rien n'y fait.

Des idées ? Merci d'avance.

Hors ligne

 

#2 07-10-2008 17:39:22

cr0cK
Membre
Date d'inscription: 10-07-2008
Messages: 14

Re: Routes par défaut qui prime sur tout le reste

Bon, je pense avoir trouvé.

Le schéma de la route par défaut est trop "large" et du coup, l'url "/section/1" est traitée par la route par défault.
Suffit donc d'être plus restrictif dans la route par défault en précisant le premier paramètre comme public ou admin.

Code:

// default public route
$router->addRoute(
    'defaultPublic',
    new Zend_Controller_Router_Route(
        '/public/:module/:controller/:action/*',
        array (
            'access' => 'public',
            'module' => 'default',
            'controller' => 'index',
            'action' => 'index'
        )
    )
);

// default admin route
$router->addRoute(
    'defaultAdmin',
    new Zend_Controller_Router_Route(
        '/admin/:module/:controller/:action/*',
        array (
            'access' => 'admin',
            'module' => 'default',
            'controller' => 'index',
            'action' => 'index'
        )
    )
);

Pour faire mieux, j'aurais aimé utilisé une route_regexp, mais j'ai beau suivre les exemples, j'arrive à rien.
J'en suis resté à :

Code:

$router->addRoute(
    'default',
    new Zend_Controller_Router_Route_Regex(
        '/([public|admin])/:module/:controller/:action/*',
        array (
            'access' => 'public',
            'module' => 'default',
            'controller' => 'index',
            'action' => 'index'
        ),
        array(
            1 => 'access'
        )
    )
);

... où normalement j'attends en premier param uniquement "public" OU "admin", et je map la capture entre () en tant que param "access" (3ème param de la route).

Mais ça ne marche point...

J'aurais aimé des avis sur tout ça, sur vos façons de faire et ce que vous en pensez...

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages