Le routage dans Zend Framework 2
Je suis en train de faire quelques routage dans Zend Framework 2, mais cela ne fonctionne pas.
Les principes de base du squelette de l'application sont de travail, j'ai donc ajouté un nouveau module appelé Utilisateur et le code suivant dans le fichier \module\User\config\module.config.php
'controllers' => array(
'invokables' => array(
'User\Controller\User' => 'User\Controller\UserController',
),
),
'router' => array(
'routes' => array(
'login' => array(
'type' => 'Literal',
'options' => array(
'route' => '/login',
'defaults' => array(
'__NAMESPACE__' => 'User\Controller',
'controller' => 'User',
'action' => 'login',
),
),
),
'user_create' => array(
'type' => 'Literal',
'options' => array(
'route' => '/user/create',
'defaults' => array(
'__NAMESPACE__' => 'User\Controller',
'controller' => 'User',
'action' => 'create',
),
),
),
),
),
Si j'essaie d'accéder à la première route (/login), il fonctionne.
Mais la deuxième voie (/utilisateur/créer) des résultats de l'erreur:
Fichier:
F:\www\ZendVendas\library\Zend\Mvc\Router\Http\TreeRouteStack.php:313
Message:
Route with name "create" not found
Si je dois créer un itinéraire sans le nom du contrôleur, il fonctionne:
'create' => array(
'type' => 'Literal',
'options' => array(
'route' => '/create',
'defaults' => array(
'__NAMESPACE__' => 'User\Controller',
'controller' => 'User',
'action' => 'create',
),
),
),
Mais je veux que la route étaient "/user/créer" et ne pas "/créer".
J'ai cherché pendant de nombreux sujets, mais ne peut pas voir où est mon erreur.
D'apprécier l'aide 😉
Edit: réglé code avec des suggestions de @Jurian
'router' => array(
'routes' => array(
'user' => array(
'type' => 'Literal',
'options' => array(
'route' => '/user',
'defaults' => array(
'controller' => 'User\Controller\User',
'action' => 'profile',
),
),
'child_routes' => array(
'login' => array(
'type' => 'Literal',
'options' => array(
'route' => '/login',
'defaults' => array(
'controller' => 'User\Controller\User',
'action' => 'login',
),
),
),
'create' => array(
'type' => 'Literal',
'options' => array(
'route' => '/create',
'defaults' => array(
'controller' => 'User\Controller\User',
'action' => 'create',
),
),
),
),
),
),
),
Vous devez vous connecter pour publier un commentaire.
Vous devez comprendre comment les travaux de routage dans Zend Framework 2. Les Routes ont un nom et un peu de configuration. La structure se présente comme suit:
Ici les noms de routes sont
route_name_1
etc. Si vous assemblez une url, vous utilisez que le nom de l'itinéraire. Donc, siroute_name_1
a l'url/foo/bar/baz
, vous pouvez demander l'url deroute_name_1
en utilisant l'url helper de vue:Votre url
/user/create
est mappé à la route nomuser_create
afin d'assembler cette url, vous devez passer sur le nom de la route:ENFANT ROUTES
Il y a aussi une notion d'enfant routes. Cela peut vous donner un itinéraire
user
qui correspond à/user
et puis cet utilisateur itinéraire d'un enfantcreate
qui correspond à/create
et en tant que tel "total" de l'itinéraire de créer est/user/create
. Cela peut être configuré comme suit:Maintenant, si vous voulez monter une url pour
route_name_2
il semble juste comme ci-dessus:Mais si vous avez besoin pour assembler l'url pour
child_name_1
vous construire un "chemin" avec un/
entre le nom et son parent(s):Ainsi, bien que vous pouvez accéder à la
/user/create
route bien avec le nom de la route que vous avez déjà, vous pouvez utiliser de l'enfant routes que cela vous donne plus de flexibilité de routage du système:Alors vous avez un itinéraire
user
qui correspond à un "profil". Si vous assemblezuser/create
vous allez à/user/create
et il utilise le "créeaction" de l'utilisateur du contrôleur. La même hapens avecuser/login
route.J'ai trouvé ce que je faisais mal.
Dans un de mes fichiers de vue, il y avait une fonction URL pointant vers la route
/create
.Il serait beaucoup plus utile si Zend indiqué le fichier avec l'invalide route, mais, une fois j'ai trouvé l'erreur, tout fonctionne maintenant.
Merci pour l'aide!
File: \module\User\view\user\user\create.phtml
Message: Route with name "create" not found
🙂