Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
'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
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
donc utilise des childs route du style:
'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
Dernière modification par flobrflo (06-03-2014 09:00:52)
Hors ligne
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 :
'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
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 à
... '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
Merci flobrflo !!!
Je commence à comprendre.
Hors ligne
re encore moi
J'ai avancé mais je sais pas si je suis sur la bonne voie :
'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
Salut, l'erreur que tu as eu c'est simplement parce que tu as loupé ta conf donc refais la bien . 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
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
Hors ligne
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
du style comme cela :
'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
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
sauf que quand je fais :
admin/menus/add => cela me renvoi vers menus toujours ....
Hors ligne
si tu va sur ta route page? ça te renvois au bon endroit?
Hors ligne
si je rentre : [domaine]/admin/menus/add => cela équivaut à [domaine]/admin/menus
Hors ligne
l'url se réécrit dans le navigateur? ou c'est l'action du menus qui s’exécute?
Hors ligne
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
Jai refais comme cela :
'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
mmmhh..
my bad
'route' => '/add',
Hors ligne
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
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
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
normalement tu devrais avoir tes vues dans :
view/admin/admin/menus
=> view / NomModule / NomController / tonfichier.phtml
c'est une norme pour simplifier ta recherche
Hors ligne
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
ben je les aient bien dedans ...
Hors ligne
tu a quoi dans ton controller?
Hors ligne
je dois pas avoir bien fait alors les routes ?
Hors ligne