2012-02-27 46 views
2

如何使用Symfony2添加對主題的支持,其中主題(當前主題的路徑)存儲在數據庫中的每個用戶?例如:Symfony2 Twig從數據庫主題?

------------------------------------------------------------- 
| User    | id | username | password | theme_name | 
------------------------------------------------------------- 
    Bob     1 Bob  327n829 /Default 
    Alice    2 Alice  2c839n42 /Pink 

因此,對於給定用戶,Symfony的有來自Resources/views/{theme_name}加載正確的模板,並退回到Resources/views/Default如果模板不存在。

我檢查了這兩個包:

定義主題,但似乎都沒有裝修嫩枝我的模板需要。任何幫助深表感謝。

回答

4

我們使用LiipThemeBundle和我們的聽衆內核:

public function onEarlyKernelRequest(GetResponseEvent $event) 
{ 
    $request = $event->getRequest(); 

    if ($request->attributes->has('_theme') === false) { 
     // if you use annotation with doctrine, you'll need to register them before that line 
     $user = $this->container->get('doctrine.orm.entity_manager')->getRepository('UserBundle:User')->findBy(...); 

     // you probably will want to set _theme in request context, not in the $request object 
     $request->attributes->set('_theme', $user->getTheme()); 
     $this->container->get('liip_theme.active_theme')->setName($user->getTheme()); 
    } 
    //$this->router->setContext($context); 
} 

有是one problem與LiipThemeBundle,你需要採取的帳戶。

+0

感謝您的回答,但我真的不需要使用一束只是爲了改變一條路徑!我可以問你爲什麼要改變RouteListener中的活動主題嗎?編輯:這是不需要切換主題傳遞主題參數。 – gremo 2012-02-28 03:05:27

+0

@Gremo LiipThemeBundle是一種將主題支持添加到項目中的方式。這是爲了「如果模板不存在,Symfony必須從Resources/views/{theme_name}加載正確的模板,並回退到Resources/views/Default。」它不是RouteListener,它是EarlyKernelRequest監聽器。 「那就是不需要切換主題傳遞主題參數」你是什麼意思? – meze 2012-02-28 06:24:31

+0

@格雷莫 - 你有沒有得到這個工作我有同樣的問題? – someuser 2013-04-12 19:45:22