2010-03-08 6 views
3

J'utilise Zend Framework pour mon site web, et je viens de créer un module spécial "api" pour créer ... Eh bien, une API.Zend Framework: Sous-répertoires dans le répertoire des contrôleurs

Maintenant, j'ai beaucoup de contrôleurs dans mon module et j'aimerais créer des sous-répertoires dans ce répertoire de contrôleurs afin de le "ranger". Ma nouvelle structure serait quelque chose comme ceci:

- controllers/ 
- controllers/contents/[controllers] 
- controllers/users/[controllers] 
- controllers/misc/[controllers] 

Cependant, je me trouve totalement incapable de trouver ce genre de urls et redirections utilisant Zend_Controller_Router_Route pourrait mapper ces contrôleurs. Est-il possible de le faire en quelque sorte ou devrais-je simplement revenir à la structure normale et mettre tous mes contrôleurs dans le même répertoire?


J'ai essayé d'utiliser les séparateurs _ comme suggéré par smack0007 et comme il semblait logique étant donné la Zend Framework se réfère généralement à des sous-répertoires, mais je suis une erreur.


Edit: Removed long texte d'erreur car il n'a pas été liée à la question car il était seulement un problème parce que je n'ai pas utilisé l'affaire propre, croyant que je devais mettre une majuscule à la première lettre de le répertoire. Tout fonctionne bien maintenant.

+0

que chaque contrôleur peut avoir son propre vues, je pense qu'il est préférable d'utiliser plusieurs modules. un module api_contents, un module api_users. je pense maintenant aller trouver comment mettre sous-modules dans un module! – Alexar

+0

goto [http: // stackoverflow.com/questions/592299/zend-cadre-1-7-5-how-to-changement-contrôleur-répertoire] [1] [1]: http://stackoverflow.com/questions/592299/zend-framework-1-7-5-comment-changer-controller-directory –

Répondre

3

Je l'ai fait dans le projet dans la version 1.5 mais je ne sais pas si cela fonctionnera plus.

Vous devez préfixer vos contrôleurs avec "{FOLDER} _", puis utiliser le nom complet dans l'URL.

Donc, dans votre cas, vous avez un contrôleur nommé:

contents_FooController 

et un itinéraire:

/contents_foo/index 
+0

Eh bien, il me semble que ce comportement a été modifié: J'essaie d'accéder à un contrôleur Contents_FooController dans un sous-répertoire "contenu" de la " répertoire des contrôleurs (dans le module par défaut), il me dit qu'il ne peut pas le trouver. Je vais modifier les informations de question avec ces données. – Hugo

+0

Essayez une chose pour moi: Renommez le dossier "contents" en "Contents" – smack0007

+0

Laissez-moi corriger ce que je viens de dire, cela fonctionne (édité le mauvais répertoire, désolé), merci! J'ai fait une erreur en croyant que je devais mettre le nom du répertoire en majuscule, merci beaucoup pour l'aide. – Hugo

0

je tentais d'accomplir plusieurs niveaux à l'adresse d'une ancienne application et en évitant de utiliser beaucoup de roulés url. J'ai donc pensé à regrouper les contrôleurs dans les sous-répertoires et à définir un routage d'URL pour cela.

Pour une structure

 
modules 
--test 
    --controllers 
    --sub 
     -- OtherController.php 
    --DefaultController.php 

Dans le Bootstrap.php du module I ajouté:

public function __construct($application) 
    { 
     parent::__construct($application); 
     $frontController = Zend_Controller_Front::getInstance(); 
     $frontController->addControllerDirectory(__DIR__ . '/controllers', 
      'test'); 
     $frontController->addControllerDirectory(__DIR__ . '/controllers/sub', 
      'test_sub'); 
    } 

DefaultController.php est

class Test_DefaultController extends Zend_Controller_Action { 
    public function subAction() 
    { 
     $level1 = $this->getRequest()->getParam('level1'); 
     $level2 = $this->getRequest()->getParam('level2'); 
     return $this->_forward($level2, $level1, 'test_sub'); 
    } 

Donc, ce transmettra à notre contrôleur dans le sous-répertoire.

Enfin, a ajouté la route:

new Zend_Controller_Router_Route_Regex('([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)', 
    array(), 
    array(1 => 'module', 2 => 'controller', 3 => 'action', 4 => 'level1', 5 => 'level2'), 
    '%s/%s/%s/%s/%s' 
) 

Maintenant, avec un test de demande/default/sous/autre/index, vous pouvez appeler le indexAction dans OtherController.php

Questions connexes