Направляйте все запросы через PageController, кроме существующих контроллеров (Zend Framework) - PullRequest
4 голосов
/ 26 марта 2010

Для новой CMS я разработал модуль Pages, который позволяет мне управлять древовидной структурой сайта. Каждая страница доступна по URL http://www.example.com/pageslug/, где pageslug идентифицирует вызываемую страницу.

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

Достаточно просто перехватить все запросы к контроллеру страниц, но как исключить существующие контроллеры? Это мой модуль начальной загрузки. Как я могу достичь этого наиболее предпочтительным способом

<?php

class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{

    protected function _initRoute()
    {
        $this->bootstrap('frontController');

        /* @var $frontcontroller Zend_Controller_Front */
        $frontcontroller = $this->getResource('frontController');

        $router = $frontcontroller->getRouter();
        $router->addRoute(
            'all',
            new Zend_Controller_Router_Route('*',
                array('controller' => 'pages',
                      'action'     => 'view')
            )
        );

    }

}

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

Установка контроллера страниц по умолчанию и добавление маршрута для каждого существующего контроллера может очень быстро запутаться, и вам придется менять его каждый раз, когда вы добавляете контроллер.

Альтернативой может быть настройка ErrorController. Поскольку в случае отсутствия контроллера среда выдаст Zend_Controller_Dispatcher_Exception, который будет передаваться обработчику ошибок как EXCEPTION_NO_CONTROLLER, вы можете просто проверить этот тип и перейти к контроллеру страниц.

Если вы чувствуете себя мазохистом, вы также можете написать собственный класс маршрута, который возвращает false, если контроллер существует, и обрабатывает все маршруты, если нет. Вероятно, это лучший вариант с точки зрения ролей и обязанностей, но также и самый сложный для реализации.

3 голосов
/ 26 марта 2010

Zend маршруты работают по порядку - если вы добавите второй маршрут после первого, он будет иметь приоритет , если он соответствует . В моем собственном проекте Zend у меня есть куча маршрутов, первый из которых во многом похож на твой, поймай весь маршрут. Тем не менее, все, что находится под ним, совпадает с URL-адресом, переопределяет его - просто попробуйте добавить немного более конкретные маршруты (если все ваши / user / запросы идут к вашему user_controller, добавьте / user / * route)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...