Symfony2 Маршрутизация внутри пакета

У меня есть проект Symfony, где я разделил свой код на два разных пакета, скажем, HomeBundle и AppBundle, однако маршруты обычно доступны внутри обоих пакетов.

например:- /home определенные в HomeBundle также доступны из AppBundle

а также

/App определенные в AppBundle также доступны из HomeBundle

я хочу получить доступ /home ТОЛЬКО из HomeBundle а также /App только AppBundle Я ищу «структурирование» своего кода таким образом, чтобы мне не нужно было писать какую-либо логику для достижения этой цели, но вместо этого я использую структуру фреймворков Symfony, чтобы сделать это для меня, что-то вроде ограничения маршрутизации только внутри пакета, или каким-то образом, когда определение маршрута выходит за рамки, когда находится в неправильном пакете

я использую аннотации для маршрутизации и определяется в app / config / routing.yml

редактировать: приложение требует субдоменных разделов, поэтому я также использую этот хост / по умолчанию с заполнителем

любая помощь будет оценена 🙂 спасибо

2

Решение

К сожалению, это невозможно, прежде всего из-за архитектуры пакетов Symfony. В то время как разделение вашего кода на пакеты полезно с когнитивной точки зрения, Symfony не имеет понятия, что нужно «входить в пакет»; какой код запускается (особенно действия вашего контроллера) обычно обрабатывается маршрутами, и маршруты должны быть скомпилированы вместе из ВСЕХ пакетов, чтобы гарантировать успешную маршрутизацию запроса.

Вы должны написать дополнительный код, чтобы выполнить то, что вы просите — моя первоначальная мысль будет вашей собственной Controller класс (может продолжаться от FrameworkBundle\Controller\Controller) который выполнял некоторый код перед запросом (см. документация что может достичь этого).

По сути, это архитектурное решение для вас, и мой вопрос был бы — почему вы не хотите иметь доступ /home от AppBundle? Будет ли работать настройка безопасности / роли или вы пытаетесь вставить код в песочницу?

РЕДАКТИРОВАТЬ После некоторых дополнительных подробностей выясняется, что требование заключается в двух разных действиях для одного и того же пути URL (например, /home) но в разных доменах, например www.example.com/home а также subdomain.example.com/home, В данном случае речь шла не о совместном использовании кода, а о URL, поэтому Symfony маршрутизация на основе хоста / домена Решение сработало.

2

Другие решения

Я предполагал, что бизнес-логика внутри пакетов изолирована и не будет «осведомлена» о маршрутах, определенных внутри других пакетов, оказалось, что маршруты доступны глобально для всех пакетов, я хотел использовать среду Symfony для достижения того, что я просил потому что это происходит, поэтому нет способа сделать это. Я, вероятно, должен использовать Слушатели или перед фильтрами и т. д. для достижения этой цели. Джон Ноэль ответил на это.

К счастью для меня, комплекты работают на отдельных доменах (один на основном домене, а другой на поддомене). Я заметил это после разговора с @John Noel, он предложил сопоставить маршрут на основе хоста / домена. Я имел это на месте ранее, при втором взгляде, который я понял, я должен на основе домена перенаправить все (кроме белого списка маршрутов) маршруты на контроллер, который выдает исключение 404. Вот что я имею в виду.

Home_restrict:
path:     /{slug}
host:     "{domain}"defaults:
_controller: HomeBundle:Home:notfound
requirements:
domain: example.com|www.example.com
slug: ^(?!.*(admin|login)$).*

Маршруты, которые появляются в верхней части списка на странице, имеют приоритет, поэтому их следует размещать соответствующим образом.

1

Вы можете добавить routing.yml за пакет и включите их в свою «глобальную» маршрутизацию:

# src/HomeBundle/Resources/config/routing.yml
home:
resource: "@HomeBundle/Controller/HomeController.php"type:     annotation

а также

# src/AppBundle/Resources/config/routing.yml
home:
resource: "@AppBundle/Controller/AppController.php"type:     annotation

затем импортируйте их в app/config/routing.ymlи, может быть, даже префикс там?

# app/config/routing.yml
app:
resource: "@AppBundle/Resources/config/routing.yml"prefix:   /app
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector