Вопрос

Я использую Zend Framework для своего веб-сайта и только что создал специальный модуль "api" для создания...Ну, API.

Теперь у меня в моем модуле много контроллеров, и я хотел бы создать подкаталоги в этом каталоге controllers, чтобы "привести его в порядок".Моя новая структура была бы примерно такой :

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

Однако я нахожусь в полной неспособности найти, какие URL-адреса и перенаправления с использованием Zend_Controller_Router_Route могли бы быть сопоставлены с этими контроллерами.Возможно ли это как-то сделать или я должен просто вернуться к обычной структуре и поместить все мои контроллеры в один каталог?


Я попытался использовать разделители _, как предложено smack0007, и поскольку это казалось логичным, учитывая, как Zend Framework обычно ссылается на подкаталоги, но я получил сообщение об ошибке.


Редактировать :Удалил длинный текст ошибки, поскольку он не был связан с вопросом, поскольку это была проблема только из-за того, что я не использовал регистр propre, полагая, что мне нужно было поместить верхний регистр в первую букву каталога.Теперь все работает хорошо.

Это было полезно?

Решение

Я делал это в project еще в версии 1.5, но я не знаю, будет ли это работать больше.

Вы должны добавить к своим контроллерам префикс "{FOLDER}_", а затем использовать полное имя в URL-адресе.

Итак, в вашем случае у вас был бы контроллер с именем:

contents_FooController

и маршрут:

/contents_foo/index

Другие советы

Я пытался выполнить несколько уровней по URL-адресу для старого приложения и избегать использования большого количества URL-адресов.Поэтому я подумал о группировании контроллеров в подкаталоги и определении для них URL-адреса.

Для структуры

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

В разделе Bootstrap.php модуля я добавил:

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 является

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');
    }

Таким образом, это будет перенаправлено на наш контроллер в подкаталоге.

Наконец, добавлен маршрут:

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'
)

Теперь с запросом test/default/sub/other /index вы можете вызвать indexAction в OtherController.php

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top