2009-05-12 3 views
0

Je viens de créer un site très basique en utilisant Zend Framework et son MVC. (En fait, je ne suis même pas en train d'utiliser des modèles pour le moment, c'est juste des Controllers/Views pour les infos statiques à ce jour).Créer une Route Nommée très simple dans Zend Framework, en utilisant son MVC

Quand j'ai commencé à jouer avec les formes, je compris que dans les exemples pour Zend_Form qu'ils utilisent quelque chose comme cet ensemble l'action de la forme:

$form->setAction('/user/login') 

qui contient l'URL. Je comprends que Zend Framework a des Routes et qu'elles peuvent être nommées, mais je n'arrive pas à comprendre comment créer une route simple pour certains Contrôleur/Actions afin que je puisse faire quelque chose comme ceci:

$form->setAction($named_route) 
// or 
$form->setAction('named_route') 

J'espère que ma question est claire. Je n'ai pas été capable de trouver des questions en double, mais si vous en trouvez une et que vous en parlez, ça ne me dérange pas. Les liens vers les ressources sont aussi bons que des exemples, alors ne perdez pas votre temps si vous connaissez un article de blog décent quelque part. Merci!

Répondre

1

Références: http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.standard - Cherchez "12.5.7.1 Zend_Controller_Router_Route." Pour une explication plus claire.

Ce n'est pas la meilleure façon de le faire, mais j'ai un exemple de travail. J'apprécie les corrections. Après avoir vu Shorten Zend Framework Route Definitions, je suis d'accord que les Routes nommées doivent aller dans leur propre configuration (j'utilise Django, et les Vues/URL nommées sont généralement séparées) - mais ici je vais juste définir Routes dans mon Bootstrap.

Ainsi, dans Bootstrap.php, à l'intérieur de la classe Bootstrap bien sûr, je l'ai créé une fonction qui sera exécutée automatiquement, comme suit:

public function _initRoutes() 
{ 
    $frontController = Zend_Controller_Front::getInstance(); 
    $route = new Zend_Controller_Router_Route(
     'login/', // The URL, after the baseUrl, with no params. 
     array(
      'controller' => 'login', // The controller to point to. 
      'action'  => 'index' // The action to point to, in said Controller. 
     ) 
    ); 
    $frontController->getRouter()->addRoute('loginpage', $route); 
} 

Dans l'exemple ci-dessus, « loginPage » sera le nom de la "Route nommée".

Alors, dans mon LoginController, (en fonction qui construit la forme) au lieu de faire

$form->setAction('/blah/login') 

je récupère l'URL de la Route du nom et passe que, comme suit:

$form_action_url = $this->view->Url(array(), 'loginpage', true); 
// -- SNIP -- 
$form->setAction($form_action_url) // ... 

Cela peut être inutile et faux, mais il semble fonctionner pour le moment. Ma raison de vouloir une URL nommée, quand Zend Framework gère les URL comme/Controller/View (Action)/automatiquement, c'est parce que je suis anal à propos de ce genre de chose. J'utilise Django depuis un certain temps, où les URL sont prédéfinies, et j'aime ça de cette façon.

Les urls MVC de Zend Framework fonctionnent bien.

N'hésitez pas à ajouter des notes et des corrections à la façon dont cela devrait fonctionner!

+0

Il n'y a aucune raison que vous ne puissiez pas définir l'action dans la vue, ce qui rend la syntaxe un peu plus agréable. –

+0

Maintenant que votre formulaire dépend du mot "page de connexion", et que la "page de connexion" est définie dans Bootstrap.php, n'est-ce pas une dépendance définie incorrectement? Je veux dire Bootstrap.php est un fichier à l'échelle du site alors que le contrôleur de connexion peut provenir du module externe, etc. – Ciantic

Questions connexes