Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-11-2011 15:07:46

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

[zf2.0.0beta1] : routage

Bonjour,
J'essaie d'appeler l'url /candidat/catalogue/recherche.
Je m'attend a ce que la route 'default' gère ce cas:

module.config.php dans Application:

Code:

'routes' => array(    
'default' => array(
            'type'    => 'Zend\Mvc\Router\Http\Regex',
            'options' => array(
                'regex'    => '/(?P<module>[^/]+)/(?P<controller>[^/]+)(/(?P<action>[^/]+)?)?',
                'spec'     => '/%module%/%controller%/%action%',
                'defaults' => array(
                    'controller' => 'error',
                    'action'     => 'error',
                ),
            ),
        ),    
...
);

Mais ca ne fonctionne pas.
Pour que mon controlleur soit trouvé je suis obligé d'écrire la route suivante:

module.config.php dans Candidat:

Code:

return array(
    'di'              => array(
        'instance' => array(
            'alias' => array(
...
'candidat-catalogue'         => 'Candidat\Controller\CatalogueController',
...
),
        ),
    ),

'routes' => array(
'candidat-catalogue' => array(
            'type'    => 'Zend\Mvc\Router\Http\Literal',
            'options' => array(
                'route' => '/candidat/catalogue/recherche',
                'defaults' => array(
                    'controller' => 'candidat-catalogue',
                    'action'     => 'recherche',
                ),
            ),
        ),
),
);

Je comprends que le principe des alias (ici candidat-catalogue) permet d'avoir des modules portant le même nom de controlleur (ici catalogue).

Mais je ne maitrise pas parfaitement le routage et encore moins les expressions régulières et je me vois mal écrire 1 route Literal pour chacune des centaines d'actions présentes dans mon application.

De plus, avec ce type de nommage des alias ('<module>-<controller>') je me retrouve a devoir préfixer tous mes dossiers de vues par <module>-

David

Dernière modification par booradley (16-11-2011 21:31:54)

Hors ligne

 

#2 14-11-2011 15:31:43

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: [zf2.0.0beta1] : routage

Pourquoi tu n'utilises pas plutôt le router "Segment" plutôt que Regex ? Il est beaucoup plus facile à mettre en oeuvre.

Code:

'default' => array(
                'type'    => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'      => '/[:controller[/:action]]',
                    'contraints' => array(
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*'
                    ),
                    'defaults'   => array(
                        'controller' => 'index',
                        'action'     => 'index'
                    )
                )
            ),

Les paramètres entre crochet sont optionnels. Ainsi, si rien est spécifié, il utilisera les valeurs de défauts. Si "controller" est présent, il utilisera la valeur de controller et prendra "index" par défaut.

Après avec le préfixe d'un module je dois t'avouer que je ne sais pas trop comment cela fonctionne. Mais utilise plutôt les Segment ;-).

Hors ligne

 

#3 15-11-2011 13:53:10

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: [zf2.0.0beta1] : routage

Oui cette route fonctionne à peu près comme je le souhaite et je l'ai adaptée pour qu'elle fonctionne avec les modules :

module.config.php dans Application:

Code:

'routes' => array(  
            'default' => array(
                'type'    => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'      => '/[:module/[:controller[/:action]]]',
                    'contraints' => array(
                        'module' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*'
                    ),
                    'defaults'   => array(
                        'module' => 'application',
                        'controller' => 'index',
                        'action'     => 'index'
                    )
                )
            ),    
    ),

Désormais, les controlleurs et actions sont appelés correctement.
Par contre j'ai un pb :
quand j'ajoute /param1/1/param2/2 à la suite de l'action dans l'url ca plante Fatal error: Call to undefined method Zend\Http\Response::send() in F:\ZEND\zf2\application\public\index.php

David

Dernière modification par booradley (16-11-2011 21:33:29)

Hors ligne

 

#4 15-11-2011 19:42:53

Intiilapa
Membre
Date d'inscription: 03-02-2009
Messages: 95

Re: [zf2.0.0beta1] : routage

Il faut abandonner les habitudes de ZF1 : le mot clé default, la route module par défaut, etc. La route /:module/:controller/:action n'a plus vraiment lieu d'être : le module ZF1 représentait un dossier de hack, le module ZF2 est au moins un namespace. La notion de module en tant que telle n'a plus d'intérêt. Un controller sera unique de fait même des namespaces. Il faut utiliser actuellement les alias du Di (cette partie évoluera je pense). Le plus simple serait de regarder les quelques applications ZF2 qui naissant (blog perso de Matthew ou celle d'EvanDotPro) pour avoir une idée de comment organiser ses modules. Il va falloir penser et coder différemment wink

Cette discussion a lieu en ce moment sur la mailing-list contributors avec une réponse détaillée de Matthew :
http://zend-framework-community.634137. … 39610.html

Hors ligne

 

#5 15-11-2011 23:27:32

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: [zf2.0.0beta1] : routage

Ok on en revient donc au début de ce post.
Je commence à comprendre.
Dites moi si je me trompe mais
1- Les anciennes urls du type /module/controller/action doivent être réécrites en /namespace-controller/action.
2- Tous les dossiers des scripts de vues nommes <controller> doivent etre renommés en <namespace-controller>
3- préfixer tous les alias par le namespace- afin de garantir leur unicité

Les points 2 et 3 sont confirmés dans le code du module 'contact' du blog de Matthiew
(http://git.mwop.net/?a=tree&p=zf2sa … ;f=modules)

4 - Je constate que le routeur suivant fonctionne tres bien pour les urls en /namespace-controller/action:

Code:

'default' => array(
                'type'    => 'Zend\Mvc\Router\Http\Segment',
                'options' => array(
                    'route'    => '/[:controller[/:action]]',
                    'constraints' => array(
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ),
                    'defaults' => array(
                        'controller' => 'index',
                        'action'     => 'index',
                    ),
                ),
            ),

Merci a Bakura et Intiilapa pour votre aide précieuse

Dernière modification par booradley (16-11-2011 20:57:49)

Hors ligne

 

#6 23-11-2011 21:02:04

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: [zf2.0.0beta1] : routage

Bonjour je reviens sur ce post car j'essaie d'intégrer les wildcards afin de pouvoir enfin gérer les paramètres dans les urls.

Voici le code de mon routeur default:

Code:

'default' => array(
            'type'    => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route'    => '/[:controller[/:action]]',
                'constraints' => array(
                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                ),
                'defaults' => array(
                    'controller' => 'index',
                    'action'     => 'index',
                ),
            ),
            'may_terminate' => TRUE,
            'child_routes' => array(
                'params' => array(
                    'type' => 'Zend\Mvc\Router\Http\Wildcard',
                    'options' => array(
                        'key_value_delimiter'    => '/',
                        'param_delimiter'    => '/',
                        'defaults' => array(),
                    ),
                ),
            ),
        ),

Et le code pour générer une url:

Code:

$params = array('param1'=>'99');
$params['controller'] = 'membre-identification';
$params['action'] = 'login';
        
echo $this->plugin('url')->fromRoute('default',$params);

L'url générée est /membre-identification/login
à la place de /membre-identification/login/param1/99

Quelqu'un a-t-il la solution?
Je ne trouve aucun exemple d'utilisation sur le web à part ce bout de code ici
http://pastebin.com/fdGZ5BDy

Même la doc n'en fait pas allusion donc c'est très récent
http://packages.zendframework.com/docs/ … uting.html

Dernière modification par booradley (23-11-2011 21:06:02)

Hors ligne

 

#7 02-02-2012 16:39:06

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

Re: [zf2.0.0beta1] : routage

Plop, je rebondis sur ce sujet car je souhaiterais savoir s'il est possible via les routes d'autoriser l'accès à un module uniquement via le routage.

En effet sur mon site j'ai plusieurs modules, je souhaite que seul un module puisse être accessible via cette url : http://monsite.fr/controller/action

Pour tous les autres modules je souhaiterais qu'ils soient accessible via cette url : http://monsite.fr/admin/controller/action

J'ai créé une nouvelle route qui prend en compte ces paramètres, le routage se fait correctement puisque j'accède à mes controller après /admin/ cependant j'ai toujours accès à tous les contrôleurs et mes contrôleurs qui devrait être accessible uniquement via /admin/ sont aussi accessible via l'url de base : http://monsite.fr/

voici mon routage :

Code:

[lang=php]
'admin' => array(
            //'type' => 'Zend\Mvc\Router\Http\Segment',
            'type' => 'Zend\Mvc\Router\Http\Literal',
            'options' => array(
                'route'       => '/',
                'route'     => '/admin/[:controller[/:action]]',
                'constraints' => array(
                    'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                ),
                'defaults'  => array(
                    'controller' => 'admin',
                    'action'     => 'index',
                ),
            ),
        ),

Je veux pouvoir partager mon application en plusieurs modules pour la parti admin par exemple un module "Admin", un autre "AdminUser", puis un autre "News" etc ...

Avez vous des tuyaux pour gérer ce genre de chose ?

Dernière modification par Orkin (02-02-2012 16:41:46)

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