Динамическое создание страницы входа пользователя FOS UserBundle

Я относительно новичок в Symfony 2, но у меня есть сайт с множеством разных поддоменов и пользовательских областей, которые мне бы хотелось, чтобы моя страница входа в систему была по-разному, но в настоящее время это не так. Я использую Symfony 2 и FOS UserBundle, и все работает в настоящий момент с 1 брандмауэром в security.yml. Я переопределяю FOS UserBundle Layout на документацию, но я хотел бы иметь возможность стилизовать эту страницу по-разному в зависимости от того, откуда идет запрос, например: microsite1.mainsite.com/user получает стиль A microsite1.mainsite.com / admin получает стиль B microsite2.mainsite.come / пользователь получает стиль C

Я рассмотрел несколько вариантов, и я ищу другие мнения. Первый вариант, который я рассмотрел, – это переопределение / расширение контроллеров в FOS UserBundle, чтобы можно было идентифицировать реферер и отобразить другой шаблон. Другим вариантом было использование другого брандмауэра для разных маршрутов, но мы действительно хотим, чтобы пользователи в разных микросайтах были аутентифицированы на всех сайтах, поэтому один брандмауэр является предпочтительным. Есть ли какие-либо другие решения для этого, или есть один из способов, более предпочтительный, чем другой, для решения этой относительно небольшой проблемы?

Solutions Collecting From Web of "Динамическое создание страницы входа пользователя FOS UserBundle"

Вы можете переопределить метод renderLogin SecurityController . Вот как вы могли это сделать:

 namespace Acme\UserBundle\Controller; use FOS\UserBundle\Controller\SecurityController as BaseController; use Symfony\Component\DependencyInjection\ContainerAware; use Symfony\Component\Security\Core\SecurityContext; use Symfony\Component\HttpFoundation\Request; class SecurityController extends BaseController { /** * Overriding the FOS default method so that we can choose a template */ protected function renderLogin(array $data) { $template = $this->getTemplate(); return $this->container->get('templating')->renderResponse($template, $data); } /** * You get the subdomain and return the correct template */ public function getTemplate(){ $subdomain = $this->container->get('request')->getHost(); if ($subdomain === "microsite1.mainsite.com"){ $template = sprintf('AcmeUserBundle:Security:loginMicrosite1.html.%s', $this->container->getParameter('fos_user.template.engine')); } elseif($subdomain === "microsite2.mainsite.com"){ $template = sprintf('AcmeUserBundle:Security:loginMicrosite2.html.%s', $this->container->getParameter('fos_user.template.engine')); } //blablabla //Customize with what you need here. return $template; }