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