Определение маршрутизации по умолчанию для контроллера / действия в symfony 2

Если бы я хотел сделать так, чтобы каждый url вызывал отдельно от тех, которые я определил после действия / ExplicitControllerName / ExplicitActionToRun … как может выглядеть маршрутизация.

например, некоторый псевдокод:

default_pathing: pattern: /{controller}/{action} defaults: { _controller: Bundle:Default:index } 

Поэтому, если бы я пошел на www.example.com/Page/About

он будет звонить моему контроллеру

 class Page extends Controller { public AboutAction() { // Called by above URL } } 

Этот вопрос не отвечает: Symfony2 / параметры маршрутизации / использования в качестве контроллера или имени действия

Представьте, что у меня есть 100 страниц с большим количеством страниц суб-маршрутизации, выполняющих почти ту же самую маршрутизацию каждый раз. Я хочу сделать 1 маршрутизацию для всех этих 100 контроллеров. Как мы это сделаем?

PS Я действительно собираюсь что-то вроде маршрутизации C # .NET MVC 4.0, в которой он позволяет вам установить маршрутизацию для типичной настройки, которую вы можете иметь, даже если по крайней мере ее для разработки

Ваш вопрос не совсем ясен, но вот несколько советов.

Я могу представить два варианта использования, которые вы пытаетесь решить:

1) У вас много какой-то страницы CMS, например, ваш пример, эти страницы не имеют много логики и просто визуализируют некоторый взгляд, в таком случае вы бы хотели:

 class CMSPageController { public function renderPage($pageSlug) { $page = $this->cmsPageRepository->findBySlug($pageSlug); // your logic to render the view } } 

И соответствующая конфигурация маршрутизации:

 <route id="cms_page_view" pattern="/cms/{pageSlug}"> <default key="_controller">cms_page.controller.page:renderPage</default> <requirement key="_method">GET</requirement> <requirement key="slug">[0-9a-zA-Z\-\.\/]+</requirement> </route> 

2) У вас гораздо более сложные требования и / или следуйте определенному шаблону, чтобы назвать ваш контроллер / действие, поэтому вам нужно написать UrlMatcherInterface реализацию UrlMatcherInterface . Взгляните на собственную реализацию, чтобы знать, с чего начать. Это позволит вам определить резервную копию.

Этого можно достичь с помощью аннотации @Route SensioFrameworkExtraBundle на уровне класса и метода …

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

Оба метода изначально все еще оставляют необходимость явно добавлять ресурсы маршрута в ваше app/config/routing.yml .

Пример импорта для @Route

 # import routes from a controller directory blog: resource: "@SensioBlogBundle/Controller" type: annotation 

Пример импорта для FOSRestBundle

 users: type: rest resource: Acme\HelloBundle\Controller\UsersController 

Вы можете работать, чтобы импортировать все ресурсы:

  • введение пользовательской аннотации (класс)
  • создание компилятора или пользовательского маршрутного загрузчика, в котором вы …
  • используйте Finder для поиска всех классов контроллеров во всех пакетах с помощью этой аннотации
  • наконец, добавить все это как ресурсы с аннотацией / отдыхом типа к коллекции маршрутов там

Если вы не планируете использовать сотни контроллеров и не имеете слишком большого опыта работы с проходами с компилятором, пользовательскими аннотациями и т. Д., Вам определенно будет быстрее просто регистрировать ресурсы в конфигурации маршрутизации.