Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-03-2014 23:47:59

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

ZF2 : routage action + GET

Bonjour,

J'ai un projet sous Zend Framework 2. J'ai besoin de créer les rouage (configuration) avec comme type de lien :
- /admin/
- /admin/menus/
- /admin/menus/add/1
- /admin/menus/delete/1

ou bien vaux mieux :
- /admin/
- /admin/menus/
- /admin/addmenu
- /admin/editmenu/1

- ...

Comment faire car j'arrive a faire le delete le /admin/ et le /admin/menus/ mais le add il ne le reconnais pas ....

J'ai fait comme cela module.conf.php de Admin :

Code:

'router' => array(
        'routes' => array(
            'admin' => array(
                'type'    => 'Segment',
                'options' => array(
                    'route'    => '/admin[/:action][/:delete[/:id]][/:table[/:table]][/id[/:id]]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Admin\Controller\Admin',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),

Merci pour votre aide.

Cordialement,

Hors ligne

 

#2 06-03-2014 09:00:26

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

hello
tu peu passer par plusieurs routes, ça te permettra de clarifier un peu ton controller quand tu va gérer les différentes actions smile

donc utilise des childs route du style:

Code:

'menu' => array(
        'type' => 'literal',
        'options' => array(
            'route' => '/menu',
            'defaults' => array(
                'controller' => 'MonApplication\Controller\MonController',
                'action' => 'index'
            )
        ),
     ),
    'may_terminate' => true,
    'child_routes' => array(
        'add' => array(
            'type' => 'segment',
            'options' => array(
                'route' => 'add[/:id]',
                'defaults' => array(
                    'controller' => 'MonApplication\Controller\MonController',
                    'action' => 'add'
                )
            ),
        ),
...

C'est même plus sécurisé car tu pourra vraiment être précis avec les contraintes de ta route donc moins permissif smile

Dernière modification par flobrflo (06-03-2014 09:00:52)

Hors ligne

 

#3 06-03-2014 11:26:55

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

Merci mais du coup je ne pige pas ce que c'est en fait.

Tu as un tuto en français qui l'explique bien ?

Je débute en zf2... Je connais ZF1 un  peu mais en ZF2 je ne comprends pas....

Si je met ton example avec :

Code:

'admin' => array(
                'type' => 'literal',
                'options' => array(
                    'route' => '/menu',
                    'defaults' => array(
                        'controller' => 'Admin\Controller\Admin',
                        'action' => 'index'
                    )
                ),
             ),
            'may_terminate' => true,
            'child_routes' => array(
                'add' => array(
                    'type' => 'segment',
                    'options' => array(
                        'route' => 'add[/:id]',
                        'defaults' => array(
                            'controller' => 'Admin\Controller\Admin',
                            'action' => 'add'
                        )
                    ),
                ),
            ),

Ben plus rien ne fonctionne....
Fatal error: Uncaught exception 'Zend\Mvc\Router\Exception\InvalidArgumentException' with message 'Route definition must be an array or Traversable object' in

Désolé

Hors ligne

 

#4 06-03-2014 12:26:48

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

ce que je t'ai passé c'est un exemple ^^
il faut l'adapter à ton cas.

En faites il s'agit la de déclaration de deux routes: une route 'parent' et une 'enfant'.
Dans les url que tu à montrée, on peu y dégager une hiérarchie:

- /admin/
- /admin/menus/
- /admin/menus/add/1
- /admin/menus/delete/1

tu peu distinguer 3 type d'url:
1) monurl.ext/admin (url de départ)
2) monurl.ext/admin/menus
3) monurl.ext/admin/menus/actions

tu peu ainsi avoir 3 catégorie de routes différentes

tu aura donc une déclaration de tes routes de type:

monurl/admin
              => menus
                    =>add/delete

chaque flèche représente en fait un enfant de la route précédente.
Et dans zf2, la hiérarchie parent enfant est déclarée grâce à

Code:

...
 'may_terminate' => true,
            'child_routes' => array(
...

après ils s'agit de route normale, avec un simple changement d'indentation.

pour ce qui est de l'utilisation et le fonctionnement des routes, le getting started est conseillé pour commencer :
http://framework.zend.com/manual/2.0/en … llers.html

Dernière modification par flobrflo (06-03-2014 12:27:06)

Hors ligne

 

#5 06-03-2014 13:42:41

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

Merci flobrflo !!!

Je commence à comprendre.

Hors ligne

 

#6 06-03-2014 13:56:07

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

re encore moi

J'ai avancé mais je sais pas si je suis sur la bonne voie :

Code:

'admin' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/admin',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Admin\Controller',
                        'controller'    => 'Admin',
                        'action'        => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'menus' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/menus[/:action]',
                            'constraints' => array(
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'menus' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Admin\Controller',
                                'controller'    => 'Admin',
                                'action'        => 'menus',
                            ),
                        ),
                    ),
                    
                    'pages' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/pages',
                            'constraints' => array(
                                'pages' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Admin\Controller',
                                'controller'    => 'Admin',
                                'action'        => 'pages',
                            ),
                        ),
                    ),
                    
                    'users' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/users',
                            'constraints' => array(
                                'users' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Admin\Controller',
                                'controller'    => 'Admin',
                                'action'        => 'users',
                            ),
                        ),
                    ),
                ),
            ),

Par contre si la je fais admin/menus/add cela me renvoi à menus ? pourquoi ?
J'ai bien [:/action] ?

Encore merci

Hors ligne

 

#7 06-03-2014 14:23:21

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

Re: ZF2 : routage action + GET

Salut, l'erreur que tu as eu c'est simplement parce que tu as loupé ta conf donc refais la bien smile. Tu as du oublié des paramètres. En temps normal [:/action] ne doit plus apparaître dans les url et tu dois les mettre en dur comme te l'a conseillé flobrflo. C'est d'une part plus propre et d'autre part plus performant !

Hors ligne

 

#8 06-03-2014 14:38:45

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

re coucou,

dans ta route enfant, tu a deux termes:
menus et action.

vu que c'est une route enfant, tu commencera ta route directement par le terme voulu : menus.
Si tu commence par /menus, cela veux dire que c'est une route "racine" comme admin.

De plus tu n'a pas besoin de mettre de contrainte sur ce mot vu qu'il sera toujours écris de la même manière smile

Hors ligne

 

#9 06-03-2014 14:42:58

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

Et oui c'est vrai, il serait encore plus joli de rajouter deux petites url enfants
=> menus/add
=>menus/delete

1 vérif en moins dans ton controlleur et deux fonctions plus propre et maintenable ^^

Hors ligne

 

#10 06-03-2014 14:43:11

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

du style comme cela :

Code:

'menus' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/menus',
                            'constraints' => array(
                                'menus' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Admin\Controller',
                                'controller'    => 'Admin',
                                'action'        => 'menus',
                            ),
                        ),
                        'may_terminate' => true,
                        'child_routes' => array(
                            'add' => array(
                                'type'    => 'Segment',
                                'options' => array(
                                    'route'    => 'add',
                                    'defaults' => array(
                                        '__NAMESPACE__' => 'Admin\Controller',
                                        'controller'    => 'Admin',
                                        'action'        => 'addmenu',
                                    ),
                                ),
                            ),
                            'delete' => array(
                                'type'    => 'Segment',
                                'options' => array(
                                    'route'    => 'delete',
                                    'defaults' => array(
                                        '__NAMESPACE__' => 'Admin\Controller',
                                        'controller'    => 'Admin',
                                        'action'        => 'deletemenu',
                                    ),
                                ),
                            ),
                        ),
                    ),

Mais il trouve pas la route ?

Hors ligne

 

#11 06-03-2014 14:45:53

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

exact,
maintenant il suffit juste de rajouter le paramètre que tu voulait:

'route' => 'delete[/:id]',
...


EDIT: ta route menus devient donc litteral vu qu'elle ne prend plus de paramètre "aléatoire" tu peu donc aussi enlever la contrainte ^^

Dernière modification par flobrflo (06-03-2014 14:46:51)

Hors ligne

 

#12 06-03-2014 14:47:19

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

sauf que quand je fais :
admin/menus/add => cela me renvoi vers menus toujours ....

Hors ligne

 

#13 06-03-2014 14:49:52

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

si tu va sur ta route page? ça te renvois au bon endroit?

Hors ligne

 

#14 06-03-2014 14:51:53

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

si je rentre : [domaine]/admin/menus/add => cela équivaut à [domaine]/admin/menus

Hors ligne

 

#15 06-03-2014 14:54:44

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

l'url se réécrit dans le navigateur? ou c'est l'action du menus qui s’exécute?

Hors ligne

 

#16 06-03-2014 14:58:28

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

si je rentre : [domaine]/admin/menus/add

l'url ne se réécrit pas mais lance l'action du menu et non l'action addmenu ....

Hors ligne

 

#17 06-03-2014 15:00:13

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

Jai refais comme cela :

Code:

'admin' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/admin',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Admin\Controller',
                        'controller'    => 'Admin',
                        'action'        => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'menus' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/menus',
                            'constraints' => array(
                                'menus' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Admin\Controller',
                                'controller'    => 'Admin',
                                'action'        => 'menus',
                            ),
                        ),
                        'may_terminate' => true,
                        'child_routes' => array(
                            'add' => array(
                                'type'    => 'Segment',
                                'options' => array(
                                    'route'    => 'add',
                                    'defaults' => array(
                                        '__NAMESPACE__' => 'Admin\Controller',
                                        'controller'    => 'Admin',
                                        'action'        => 'addmenu',
                                    ),
                                ),
                            ),
                            'delete' => array(
                                'type'    => 'Segment',
                                'options' => array(
                                    'route'    => 'delete',
                                    'defaults' => array(
                                        '__NAMESPACE__' => 'Admin\Controller',
                                        'controller'    => 'Admin',
                                        'action'        => 'deletemenu',
                                    ),
                                ),
                            ),
                        ),
                    ),
                    
                    'pages' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/pages',
                            'constraints' => array(
                                'pages' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Admin\Controller',
                                'controller'    => 'Admin',
                                'action'        => 'pages',
                            ),
                        ),
                    ),
                    
                    'users' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/users',
                            'constraints' => array(
                                'users' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Admin\Controller',
                                'controller'    => 'Admin',
                                'action'        => 'users',
                            ),
                        ),
                    ),
                ),
            ),

Hors ligne

 

#18 06-03-2014 15:07:42

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

mmmhh..
my bad

Code:

'route'    => '/add',

Hors ligne

 

#19 06-03-2014 15:12:59

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

en fait je viens de me rendre compte. Si je fais un die("ADD MENU"); dans l'action il y va bien....

Alors pourquoi il me retourne vers la page de menu et pas le phtml de addmenu ?

Hors ligne

 

#20 06-03-2014 15:17:50

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

s'il va bien dans l'action addmenu.

vérifie ton arborescence dans tes views, quelles soient correctes et que tes fichiers sont bien uploadé comme il faut.

Hors ligne

 

#21 06-03-2014 15:20:04

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

L'arboréscence est doit aussi corespondre aux routes ? moi j'ai :

- view/admin/menus.phtml
- view/admin/addmenu.phtml
- view/admin/deletemenu.phtml

Faut créer des répertoires ?

[EDIT] même en créant /admin/menus/addmenu/addmenu.phtml cela me fais pareil ....

Dernière modification par Paul75 (06-03-2014 15:26:33)

Hors ligne

 

#22 06-03-2014 15:23:55

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

normalement tu devrais avoir tes vues dans :
view/admin/admin/menus

=> view / NomModule / NomController / tonfichier.phtml

c'est une norme pour simplifier ta recherche smile

Hors ligne

 

#23 06-03-2014 15:27:19

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

flobrflo a écrit:

normalement tu devrais avoir tes vues dans :
view/admin/admin/menus

=> view / NomModule / NomController / tonfichier.phtml

c'est une norme pour simplifier ta recherche smile

ben je les aient bien dedans ...

Hors ligne

 

#24 06-03-2014 15:28:35

flobrflo
Membre
Lieu: Marseille
Date d'inscription: 26-04-2013
Messages: 376

Re: ZF2 : routage action + GET

tu a quoi dans ton controller?

Hors ligne

 

#25 06-03-2014 15:29:30

Paul75
Membre
Lieu: Paris
Date d'inscription: 23-12-2010
Messages: 101

Re: ZF2 : routage action + GET

je dois pas avoir bien fait alors les routes ?

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