FOSUserBundle - 在一个页面上登录和注册表单
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FOSUserBundle - 在一个页面上登录和注册表单相关的知识,希望对你有一定的参考价值。
我想制作简单的网站,在主页上,我会看到登录和注册表格。我已经考虑了好几个小时了,我还是迷路了。这是我提出的设计:
{# Login form #}
<div>
{% render url('login_form') %}
</div>
<b>or</b>
{# Register form #}
<div>
{% render url('register_form') %}
</div>
FOS用户包不支持开箱即用的这种结构(在单个模板中登录和注册),所以如果你想保持简单,那么你应该将两个页面分开。
如果强烈需要此结构,那么您应该从FOS用户包扩展相应的控制器,并使它们使用相同的模板进行输出呈现。
我尝试使用symfony 2.8进行登录并在同一页面(root / login)注册,这就是它对我有用的方式:
首先在friendsofsymfony / user-bundle / Controller / SecurityController.php中进行简单编辑
在函数loginAction的底部和返回之前添加:
$formFactory = $this->get('fos_user.registration.form.factory');
$form = $formFactory->createForm();
然后将注册表单视图添加到返回中,如下所示:
return $this->renderLogin(array(
'last_username' => $lastUsername,
'error' => $error,
'csrf_token' => $csrfToken,
'register_form' => $form->createView()
));
然后在你的login.html.twig中放置你想要的地方:
{{ form_rest(register_form) }}
- 重要提示:这将适用于登录,但如果注册验证错误,它将重定向到/注册!
我实现该功能的唯一方法是停用csrf保护,这仅用于开发目的,我强烈建议您不要在生产环境中这样做,此任务背后的问题是一个常见的错误,称为CSRF Token Mismatch
,这意味着你是发送与该表单不对应的令牌。您可以随时更改登录/注册表单并使用AJAX构建它,但是再次忘记CSRF,而应该使用HTTPS或类似的东西进行保护,但您仍然会丢失保护层。干杯!。
在这里,您不需要自定义控制器和操作
覆盖默认的FOSUserbundle视图register.html.twig
和login.html.twig
Overriden login.html.twig
{% include "@FOSUser/Registration/register_content.html.twig" %}
Overriden register.html.twig
{% include "@FOSUser/Registration/register_content.html.twig" %}
将以上两个文件放在以下位置
Symfony 4
templates/bundles/FOSUserBundle/Security/login.html.twig
templates/bundles/FOSUserBundle/Security/login.html.twig
Symfony 3
app/Resources/FOSUserBundle/Security/login.html.twig
app/Resources/FOSUserBundle/Security/login.html.twig
最后,您可以在同一页面,多个页面,所有页面上呈现登录和注册视图:P
my_login_and_registration_page.html.twig
<div class="row">
<div class="col-md-6">
{{ render(controller('fos_user.security.controller:loginAction')) }}
</div>
<div class="col-md-6">
{{ render(controller('fos_user.registration.controller:registerAction')) }}
</div>
</div>
注意:由于重写的视图不再扩展FOSUserbundle基本布局。您需要管理布局中的错误/消息显示。
检查此文件以供参考:vendor/friendsofsymfony/user-bundle/Resources/views/layout.html.twig
以上是关于FOSUserBundle - 在一个页面上登录和注册表单的主要内容,如果未能解决你的问题,请参考以下文章
使用 FOSUserBundle 自动登录 Symfony2 [重复]
Symfony2 在未登录时将 /admin/* 重定向到 /admin/login(或使用 FOSUserBundle?)