Руководства по маршрутизации, управляемой базами данных, в Zend Framework?

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

Основная идея состоит в том, что будет таблица sitePage, которая будет содержать поля pageName, controller, module и view. Когда запрос обрабатывается, мне нужно запросить базу данных для данного pageName и определить соответствующий контроллер, модуль и представление, а затем передать это в необходимый класс Zend, чтобы продолжить нормальную маршрутизацию и обработку запроса.

Заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
3 104
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Из Руководства:

preDispatch() вызывается перед отправкой действия диспетчером. Этот обратный вызов позволяет использовать прокси или фильтр. Изменяя запрос и сбрасывая его флаг отправки (через Zend_Controller_Request_Abstract::setDispatched(false)), текущее действие можно пропустить и / или заменить.

http://framework.zend.com/manual/en/zend.controller.plugins.html

Ответ принят как подходящий

Я понял, что действительно более элегантным подходом является использование маршрутизатора, но для этого вам потребуется создать собственный, расширив класс Zend_Controller_Router_Abstract и реализовав метод «маршрута».

Вы получаете объект Zend_Controller_Request_Abstract в качестве параметра метода "маршрута". Там вы можете поговорить с базой данных, а затем использовать:

Zend_Controller_Request_Abstract::setModuleName(),
Zend_Controller_Request_Abstract::setControllerName(),
Zend_Controller_Request_Abstract::setActionName()

чтобы определить свой маршрут.

Я надеюсь, что это помогает!

Вы также можете использовать метод routeStartup () в своем плагине. например:

 class My_Plugin_PageRoute extends Zend_Controller_Plugin_Abstract {

     public function routeStartup ()  {
         $front = Zend_Controller_Front::getInstance();
                    $pages = new Model_Pages();
                    $page_data = $pages ->getPageInfo();

        $router = $front->getRouter();

        foreach($page_data as $page) {
            $r = new Zend_Controller_Router_Route(
                '' . $page -> page_name,
                array('controller' => 'pages',
                      'action' => 'index',
                      'page_id' => $page -> page_id)
            );
            $router->addRoute('pages_' . $page -> page_id, $r);
        }

     }

 }

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