Если бы я хотел сделать так, чтобы каждый 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
Вы можете работать, чтобы импортировать все ресурсы:
Если вы не планируете использовать сотни контроллеров и не имеете слишком большого опыта работы с проходами с компилятором, пользовательскими аннотациями и т. Д., Вам определенно будет быстрее просто регистрировать ресурсы в конфигурации маршрутизации.