Intereting Posts
Переменные Mod_rewrite и $ _GET PHP: позволяет вашей собственной функции работать с циклом while Надежные хэш-пароли – так много противоречивых советов! Может ли кто-нибудь сказать мне, как получить косвенно связанные классы с помощью Propel ModelCriteria? Тестирование узловых модулей Slim Framework Метод Laravel attach () не работает с hasMany side Android позволяет загружать несколько файлов (максимум 150 МБ) на PHP Server Субдомены, ведущие к контроллерам Codeigniter? Im только получение одного набора результатов при попытке использовать mysql_fetch_array () Строгие стандарты PHP: создание объекта по умолчанию из пустого значения Silex: перенаправить администратор на админ-домашний путь после входа в систему Обеспечение доступа веб-приложений с одного компьютера на каждого пользователя эхо выбранные данные в php из xml Обнаружение мобильных устройств – и планшетных устройств WWW для перенаправления WWW с PHP

Маршрутизация в Symfony2

Как настроить маршрутизацию по умолчанию в Symfony2?

В Symfony1 это выглядело примерно так:

homepage: url: / param: { module: default, action: index } default_symfony: url: /symfony/:action/... param: { module: default } default_index: url: /:module param: { action: index } default: url: /:module/:action/... 

Solutions Collecting From Web of "Маршрутизация в Symfony2"

Я смотрел в кулинарной книге ответ на этот вопрос и думаю, что нашел его здесь . По умолчанию все параметры маршрута имеют скрытое требование, чтобы они соответствовали любому символу, кроме символа / ([^ /] +), но это поведение можно переопределить ключевым словом требований, заставив его соответствовать любому символу.

Следующее должно создать маршрут по умолчанию, который ловит всех остальных, и как таковой, должен быть последним в вашей конфигурации маршрутизации, поскольку любые последующие маршруты никогда не будут совпадать. Чтобы убедиться, что он совпадает с «/», включено значение по умолчанию для параметра url.

 default_route: pattern: /{url} defaults: { _controller: AcmeBundle:Default:index, url: "index" } requirements: url: ".+" 

Я не думаю, что это возможно со стандартным компонентом маршрутизации. Взгляните на этот пакет, это может помочь: https://github.com/hidenorigoto/DefaultRouteBundle

// Symfony2 PR10

в routing.yml:

 default: pattern: /{_controller} 

Он позволяет использовать такие типы URL: http: // localhost / MySuperBundle: MyController: myview

Стандартный компонент маршрутизации Symfony2 не поддерживает его, но этот комплект заполняет пробел Symfony1 слева:

https://github.com/LeaseWeb/LswDefaultRoutingBundle

Он делает то, что вы ожидаете. Вы можете по умолчанию маршрутизировать пакет, используя этот синтаксис:

 FosUserBundle: resource: "@FosUserBundle" prefix: / type: default 

Он сканирует ваш пакет и автоматически добавляет маршруты к вашей таблице маршрутизаторов, которые вы можете отлаживать, выполнив:

 app/console router:debug 

Пример автоматически добавленных маршрутов по умолчанию:

 [router] Current routes Name Method Pattern fos_user.user.login_check ANY /user/login_check.{_format} fos_user.user.logout ANY /user/logout.{_format} fos_user.user.login ANY /user/login.{_format} ... 

Вы также видите, что он также поддерживает автоматический выбор формата, используя расширение файла (html, json или xml).

Вот пример: http://docs.symfony-reloaded.org/master/quick_tour/the_big_picture.html#routing

Определение маршрута имеет только один обязательный pattern параметров и три параметра параметров по defaults , requirements и options .

Вот маршрут от моего собственного проекта:

 video: pattern: /watch/{id}/{slug} defaults: { _controller: SiteBundle:Video:watch } requirements: { id: "\d+", slug: "[\w-]+" 

Кроме того, вы можете использовать аннотацию @Route непосредственно в файле контроллера. см. https://github.com/sensio/SensioFrameworkExtraBundle/blob/master/Resources/doc/annotations/routing.rst

Что касается маршрутов по умолчанию, я думаю, что Symfony2 поощряет явное сопоставление маршрутов.

Создание маршрута по умолчанию не является хорошим способом программирования. Зачем? Потому что по этой причине было реализовано исключение. Symfony2 построен только для правильного решения.

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

Один маршрут предназначен для одной цели. Всегда. Другие думают, что плохо.

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

Если вы хотите создать «поймать все», лучшим вариантом будет захват KernelEvents::EXCEPTION . Это событие запускается всякий раз, когда исключение попадает в HttpKernel , это включает NotFoundHttpException когда маршрутизатор не может разрешить маршрут к контроллеру.

Эффект будет похож на стилизованную страницу 404 Symfony, которая будет отображаться при отправке запроса через app_dev.php. Вместо того, чтобы возвращать 404, вы выполняете любую логику, которую вы ищете.