我想在同一页面中整合FOSUserBundle的注册表和登录表单:
为此,我使用内部子请求集成了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以删除他们的&#34;扩展&#34;并且不做任何改为(因为布局是在父视图中定义的)。
但是当访问/register
路由时(例如,当用户注册成功时),我需要扩展我的基本布局,以正确呈现注册确认视图。
为了达到这个目的并在需要时使用我的基本布局,我在register.html.twig
中做了一个超级技巧:
{%
extends app.request.pathInfo == '/_fragment'
? "FOSUserBundle::empty.html.twig"
: "FOSUserBundle::layout.html.twig"
%}
有没有更好的方法来检测我们是否处于子请求中?我找了像&#34; hasParent&#34;在请求中,但没有找到任何东西。
答案 0 :(得分:2)
我需要类似于您尝试做的事情并最终使用EL,因此您可以创建一个事件监听器来检查当前请求是主服务器还是子服务器然后根据需要使用它。完整的示例是here和here。
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';
//......
}
}