Как переопределить маршрут в Symfony2

Это не дубликат переопределить единственный маршрут в symfony2. Пожалуйста, проявите терпение и внимательно прочтите мой вопрос.

Моя проблема отличается от вопроса выше. Итак, мое приложение Symfony имеет стандартную структуру. НО это настроено определенным образом.

  • app / config / routing.yml содержит несколько маршрутов пакетов, например:

    _project_custom1:
        resource: "@ProjectCustom1Bundle/Resources/config/routing.yml"
        prefix:   /custom1
    _project_custom2:
        resource: "@ProjectCustom2Bundle/Resources/config/routing.yml"
        prefix:   /custom2
    
  • Каталог src / имеет два пакета и следующую структуру, например

    Common/AdminBundle/Resources/config/routing.ymlCommon/AdminBundle/Resources/config/routing_dashboard.yml

    routing.yml содержит следующие строки:

    admin_dashboard_content: resource: "@CommonAdminBundle/Resources/config/routing_dashboard.yml" prefix: /dashboard

    routing_dashboard.yml содержит:

    admin_dashboard_license_content: path: /license-content defaults: { _controller: CommonAdminBundle:Dashboard:licenseContent }

Следующий пакет - Custom bundle. Как можно расширить DashboardController, переопределить licenseContentAction и переопределить только один (/license-content) маршрут и заставить Symfony использовать мою настраиваемую конфигурацию пакета?

Копирование той же структуры не работает. По моему объяснению я написал примерно так:

<?php
namespace Custom\Custom1\Controller;
use Common\AdminBundle\Controller\DashboardController as BaseController;
class DashboardController extends BaseController
{
    public function licenseContentAction()
    {
       //return parent::licenseContentAction();
       die("HELLO!");
    }
}

Как я могу создать файл маршрута для работы расширенного метода?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
2 325
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Все, что вам нужно сделать, это добавить эти строки в файл app/config/routing.yml.

admin_dashboard_license_content:
    path: /dashboard/license-content
    defaults: { _controller: CustomBundle:Dashboard:licenseContent }

И создайте DashboardController, расширяющий базовый контроллер Symfony с помощью метода licenseContentAction в пространство имен CustomBundle.

А теперь волшебство ...

Если вы хотите сохранить путь, вам нужно добавить эти строки в начало файла routing.yml. Название маршрута должно быть другим (уникальным), и путь, конечно же, должен быть таким же, как перекрываемый.

Symfony ищет путь и сразу же, когда он совпадает, запрос перенаправляется на соответствующее действие контроллера.

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

Symfony собирает маршруты в массив, где ключом является имя маршрута. При добавлении маршрута с таким же именем в конец файла ранее определенный маршрут отменяется.

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