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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top