1

私は Symfony 2 に比較的慣れていませんが、多くの異なるサブドメインとユーザー領域を持つサイトを持っており、ログインページのスタイルを変えたいと思っていますが、現在はそうではありません。Symfony 2 と FOS UserBundle を使用していますが、現在 security.yml の 1 つのファイアウォールですべてが正常に動作しています。ドキュメントに従って FOS UserBundle Layout をオーバーライドしていますが、リクエストの送信元に応じてそのページのスタイルを変更できるようにしたいと考えています。たとえば、次のようにします。 /admin はスタイル B を取得 microsite2.mainsite.com/user はスタイル C を取得

いくつかのオプションを検討しましたが、他の意見を探しています。私が最初に検討したオプションは、FOS UserBundle のコントローラーをオーバーライド/拡張​​して、リファラーを識別し、別の twig テンプレートをレンダリングできるようにすることでした。別のオプションは、ルートごとに異なるファイアウォールを使用することでしたが、実際には、異なるマイクロサイトのユーザーをすべてのサイトで認証できるようにしたいので、1 つのファイアウォールが優先されます。これに対する他の解決策はありますか、またはこの比較的小さな問題に取り組むために別の方法よりも好ましい方法はありますか?

4

1 に答える 1

1

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;
    }
于 2013-02-10T10:43:46.563 に答える