Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-09-2012 11:46:45

jb
Nouveau membre
Date d'inscription: 26-09-2012
Messages: 2

Probleme routage, child_route et url()

Salut,

bon tout d’abords je débute avec Zend donc au cas où ma question semble idiote merci de m'expliquer quand même clairement les choses.

J'ai un problème pour créer une url qui mène a un contrôleur déclaré en tant que child_route.

Donc j'ai dans mon module.config.php les routes suivantes:

Code:

'router' => array(
        'routes' => array(
            'customers' => array(
                'type' => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'    => '/customers[/page/:page][/:action[/:id]]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                        'page'     => '[0-9]+'
                    ),
                    'defaults' => array(
                        'controller' => 'Application\Controller\Customers',
                        'action'     => 'index',
                        'page'       => 1,
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'licences' => array(
                        'type' => 'Zend\Mvc\Router\Http\Segment',
                        'options' => array(
                            'route'    => '/licences[/:action[/:id]]',
                            'constraints' => array(
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'id'     => '[0-9]+',
                            ),
                            'defaults' => array(
                                'controller' => 'Application\Controller\Licences',
                                'action'     => 'index',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),

'controllers' => array(
        'invokables' => array(
            'Application\Controller\Customers' => 'Application\Controller\CustomersController',
            'Application\Controller\Licences' => 'Application\Controller\LicencesController'
        ),
    ),

Donc quand je fais $this->url('customers', array('action'=>'detail',  id' => $customerDetails->getAccountId()));
j'obtient /customers/detail/1 comme url et tout ce passe comme il faut, detailAction() est appelé dans CustomersController.

par contre je voudrais ensuite avoir une url du type: /customers/detail/1/licences/new ou /customers/detail/1/licences/edit/1
url qui fonctionne et appel newAction() de LicencesController mais je n'arrive pas a la generer avec url().
Si je fais $this->url('customers/licences', array('action'=>'detail',  id' => $customerDetails->getAccountId())); j'obtient /customers/page/1/index/1/licences/index et si je fais
$this->url('customers/licences', array('action'=>'new',  id' => $customerDetails->getAccountId())); j'obtient /customers/page/1/new/321/licences/index.

Bref il y'a surement quelque chose que je ne comprend pas tres bien. J'ai d'abords pensé que le fait qu'il y a dans la route du customers et dans la child_route licence le meme parametre action/id possait probleme, j'ai renommé '/licences[/:action[/:id]]' de child_route en '/licences[/:subaction[/:subid]]', et donc si j'appelais
$this->url('customers/licences', array('action'=>'detail',  id' => $customerDetails->getAccountId(), 'subaction'=>'new')); tout ce passe a peu pres bien sauf que newAction() de LicencesController n'Est pas appelé.

Donc si quelqu'un pouvait m'aider. Merci d'avance.

jb

Hors ligne

 

#2 26-09-2012 14:19:00

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Probleme routage, child_route et url()

Salut, ta route semble assez complexe en effet cependant il y a quelques trucs que je ne comprend pas.

A quoi sert [/page/:page] ?

Je ne sais si ça va te convenir mais j'aurai plus fait un truc dans le genre :

Code:

[lang=php]'router' => array(
        'routes' => array(
            'customers' => array(
                'type' => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'    => '/customers',
                    'default'  => array(
                        'controller' => 'Application\Controller\Customers',
                    ),
                ),
                'may_terminate' => false,
                'child_routes' => array(
                    'detail' => array(
                        'type' => 'Zend\Mvc\Router\Http\Segment',
                        'options' => array(
                            'route'    => '/detail/:id',
                            'constraints' => array(
                                'id'     => '[0-9]+',
                            ),
                            'defaults' => array(
                                'action'     => 'detail',
                            ),
                        ),
                        'may_terminate' => true,
                        'child_routes' => array(
                            'licences' => array(
                                'type' => array(
                                    'options' => array(
                                        'route' => '/licence',
                                        'default' => array(
                                            'controller' => 'Application\Controller\Licence',
                                        ),
                                    ),
                                    'may_terminate' => false,
                                    'child_routes' => array(...),
                                ),
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),

'controllers' => array(
        'invokables' => array(
            'Application\Controller\Customers' => 'Application\Controller\CustomersController',
            'Application\Controller\Licences' => 'Application\Controller\LicencesController'
        ),
    ),

En théorie c'est mieux de définir toutes les routes que des routes "globales" comme tu as fait. A voir si ça peut te convenir comme ça mais je ferais un truc dans ce genre (copie pas bêtement doit y avoir un problème de parenthèses :p. Certes cette solution te donne moins de routes génériques mais c'est plus rapide et surtout plus clair (je trouve).

Hors ligne

 

#3 26-09-2012 14:42:02

jb
Nouveau membre
Date d'inscription: 26-09-2012
Messages: 2

Re: Probleme routage, child_route et url()

Orkin a écrit:

Salut, ta route semble assez complexe en effet cependant il y a quelques trucs que je ne comprend pas.

A quoi sert [/page/:page] ?

c'Est aprce que j'utilise une pagination dans ma view.

Orkin a écrit:

En théorie c'est mieux de définir toutes les routes que des routes "globales" comme tu as fait. A voir si ça peut te convenir comme ça mais je ferais un truc dans ce genre (copie pas bêtement doit y avoir un problème de parenthèses :p. Certes cette solution te donne moins de routes génériques mais c'est plus rapide et surtout plus clair (je trouve).

En effet ça marche bien comme ça. Je pense que cela va me convenir. Merci pour l'aide.

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