FOSUserBundle:嵌入登录表单并选择其模板

zii*_*web 8 symfony

我想在我的模板中插入FOSUserBundle的登录表单,如下所示:

<div id="sidebar">
     {% render "FOSUserBundle::Security::login" %}
</div> 
Run Code Online (Sandbox Code Playgroud)

但最初不要渲染在loginAction()代码中调用的模板.

我以为我觉得在这个例子中传递我想要渲染的模板作为'max'的参数是有用的:

<div id="sidebar">
    {% render "AcmeArticleBundle:Article:recentArticles" with {'max':
3} %}
</div>
Run Code Online (Sandbox Code Playgroud)

这在symfony2中可能吗?如果不..

我应该使用loginAction中的相同代码为我的包创建另一个操作吗?或者我应该修改原始的loginAction代码并编写控制结构?

if(currentPage == 'home')
 renderResponse('template1')
else
renderResponse('template2')
Run Code Online (Sandbox Code Playgroud)

Dav*_*les 36

您可以创建一个部分来存储纯HTML表单,例如这个简单的表单:

<form action="{{ path("fos_user_security_check") }}" method="post">
  <label>Email</label>
  <input type="text" name="_username" required="required" />

  <label>Password</label>
  <input type="password" name="_password" required="required" />

  <button type="submit">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

然后在你的布局中只包括你的全新部分:)

如果您需要csrf令牌(强烈建议使用),只需将提供程序定义为Twig全局变量:

twig:
    globals:
        fos_csrf_provider: "@form.csrf_provider"
Run Code Online (Sandbox Code Playgroud)

然后只需在表单中添加隐藏的输入字段:

  <input type="hidden" name="_csrf_token" value="{{ fos_csrf_provider.generateCsrfToken('authenticate') }}" />
Run Code Online (Sandbox Code Playgroud)

  • @ David,我如何实现显示错误的相同表单?谢谢!! (6认同)
  • 此消息:>自版本2.4以来,不推荐使用Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderAdapter类,将在3.0版中删除.请改用Symfony\Component\Security\Csrf\CsrfTokenManager类.让我找一个修复.结果你不再需要全球了.只需在表单中添加以下行:<input type ="hidden"name ="_ csrf_token"value ="{{csrf_token('authenticate')}}"/> (4认同)

Tom*_*oms 10

您必须指定您正在呼叫控制器

{{ render(controller('FOSUserBundle:Security:login')) }}
Run Code Online (Sandbox Code Playgroud)