Zend Framework: dans le répertoire des sous-répertoires contrôleurs
-
18-09-2019 - |
Question
J'utilise le Zend Framework pour mon site web, et vient de créer un module spécial « api » pour créer ... Eh bien, une API.
Maintenant, j'ai beaucoup de contrôleurs dans mon module et je voudrais créer des sous-répertoires dans ce répertoire afin de contrôleurs « en ordre » il. 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 aller en quelque sorte ou devrais-je revenir à la structure normale et de 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 façon dont Zend Framework se réfère généralement à des sous-répertoires, mais je suis une erreur.
Edit: Suppression du 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 du répertoire. Tout fonctionne bien maintenant.
La solution
Je l'ai fait dans le projet de retour dans la version 1.5, mais je ne sais pas si cela fonctionnera plus.
Vous devez préfixer vos contrôleurs avec « {} _ FOLDER » puis utilisez le nom complet dans l'URL.
Dans votre cas, vous auriez un contrôleur nommé:
contents_FooController
et un itinéraire:
/contents_foo/index
Autres conseils
Je suis en train d'accomplir plusieurs niveaux à l'URL d'une ancienne application et en évitant d'utiliser beaucoup de Roulés url. Donc, je pensais à grouper les contrôleurs dans les sous-répertoires et définissant une URL pour Roule il.
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é l'itinéraire:
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