У меня есть довольно сложные правила маршрутизации, которые достижимы только с помощью специального кода, а не с маршрутизатором по умолчанию.
Маршрутизатор также должен учитывать доменное имя.
Возможно ли (и как) определить мой собственный класс Router, который будет иметь метод, принимающий Request
и возвращающий имя пула / контроллера?
Чтобы добиться того, что вы просите, вам не нужно полностью переопределять маршрутизатор
Вы можете просто написать свой собственный класс, который реализует UrlMatcherInterface . Если вы хотите иметь возможность создавать URL-адреса, соответствующие вашей схеме, вам придется создать еще один класс, который также переопределяет UrlGeneratorInterface .
Чтобы принять во внимание доменное имя, вам необходимо использовать RequestContext, который передается их конструкторам (он плохо документирован, но для получения подробной информации проверьте Router :: get {Matcher, Generator}).
Как только ваши классы подготовлены, вы можете ввести их в маршрутизатор, просто переопределив параметры «router.options.generator_class» и «router.options.matcher_class» в вашем комплекте.
Тем не менее , это может быть не лучший подход к тому, что вы хотите – переопределение частей маршрутизатора, как это требует большой осторожности, чтобы сохранить все кэширование.
Возможно, вы захотите использовать обычный маршрутизатор Symfony2, но передаете ему разные файлы маршрутов в зависимости от того, что такое домен запроса. Это можно сделать легко, если вы настроили свой веб-сервер для установки переменной или выполнения другого фронтального контроллера в зависимости от имени домена.
Используя эту информацию, вы можете загрузить другую «среду» для каждого запроса, с той только разницей между различными средами, что они используют разные файлы маршрутизации.
Изучив учебник Маттиаса Новака, я сделал небольшую модификацию для моего CRUD-маршрутизатора.
До и после использования CrudLoader можно увидеть здесь в маршрутизации / crud / acompetencies.yml
Это просто обходной путь или неправильное использование ресурса, как вы можете видеть в этом классе CrudLoader .
Я не знаю, правильная или плохая практика. Кажется, это хорошо работает.
связать сонату adminata, которая имеет собственные классы классов маршрутизации
Для symfony 2.5 требуется параметр для пользовательского совпадения: router.options.matcher_base_class и класс, который реализует Symfony \ Component \ Routing \ Matcher \ RequestMatcherInterface