2015-07-19 54 views
1

我想將FOSUserBundle的註冊和登錄的形式在同一頁面中整合:檢測Symfony的內部子請求在樹枝視圖

enter image description here

爲了做到這一點,我使用內部子請求集成的2種形式:

<div class="col-md-6"> 
    {{ render(controller('FOSUserBundle:Security:login')) }} 
</div> 

<div class="col-md-6"> 
    {{ render(controller('FOSUserBundle:Registration:register', {'parent': true})) }} 
</div> 

以及編輯FOSUserBundle:Registration:register.html.twig以消除他們的「延伸」,並把什麼代替(如佈局在父視圖中定義)需要。

但是,當訪問/register路由(例如,當用戶註冊成功時),我需要擴展我的基礎佈局,以正確呈現註冊確認視圖。

enter image description here

要做到這一點並在需要時使用我的基地佈局,我把那個register.html.twig的ulgy招:

{% 
    extends app.request.pathInfo == '/_fragment' 
     ? "FOSUserBundle::empty.html.twig" 
     : "FOSUserBundle::layout.html.twig" 
%} 

是否有更好的方式,如果我們在一個子請求檢測?我在請求中尋找類似「hasParent」的東西,但沒有找到任何東西。

回答

2

我需要類似於你想要做的事情,並最終使用EL,所以你可以創建一個Event Listener來檢查當前請求是否是主或子,然後按照你的意願使用它。完整的例子是herehere

EL可以是onKernelController或onKernelRequest。如果你很樂意把你的控制器的變量傳遞給twig,那麼使用onKernelController就是我使用的類似原因。

services.yml

services: 
    application_backend.listener.user_controller: 
     class: Application\BackendBundle\EventListener\UserControllerListener 
     tags: 
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest } 

事件監聽器(onKernelRequest)

namespace Application\BackendBundle\EventListener; 

use Symfony\Component\HttpKernel\Event\GetResponseEvent; 

class UserControllerListener 
{ 
    public function onKernelRequest(GetResponseEvent $event) 
    { 
     $req = $event->isMasterRequest() ? 'Master' : 'Sub'; 
     $req = $event->getRequestType() ? 'Master' : 'Sub'; 

     //...... 
    } 
} 
+0

我喜歡它!結合枝條延伸,可以很容易地將這些信息轉移到枝條視圖。 –

+0

你是對的,如果你不喜歡在控制器中處理它,定製的樹枝延伸是另一種方式。 – BentCoder