1

我想做一个简单的网站,在主页上,我会看到登录和注册表单。我已经考虑了好几个小时,但我仍然迷路了。这是我为此提出的设计:

{# Login form #}
<div>
  {% render url('login_form') %}
</div>
<b>or</b>
{# Register form #}
<div>
  {% render url('register_form') %}
</div>
4

4 回答 4

2

FOS 用户包不支持开箱即用的这种结构(在单个模板中登录和注册),所以如果你想保持简单,那么你应该分开两个页面。

如果强烈需要这种结构,那么您可能应该从 FOS 用户包中扩展相应的控制器,并使它们使用相同的模板进行输出渲染。

于 2013-03-29T18:03:23.033 回答
0

我尝试使用 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) }}
  • 重要提示:这可以正常登录,但如果出现注册验证错误,它将重定向到 /register !
于 2016-09-27T12:49:19.390 回答
0

我实现该功能的唯一方法是停用 csrf 保护,这仅用于开发目的,我强烈建议您不要在生产环境中这样做,此任务背后的问题是一个常见的错误,称为CSRF Token Mismatch,这意味着您正在发送与该形式不对应的标记。您可以随时更改登录/注册表单并使用 AJAX 构建它,但再次忘记 CSRF,您应该使用 HTTPS 或类似的东西进行保护,但您仍然失去了保护层。干杯!。

于 2017-03-02T20:09:21.843 回答
0

给你,不需要自定义控制器和动作

覆盖默认的 FOSUserbundle 视图register.html.twiglogin.html.twig

覆盖 login.html.twig

{% include "@FOSUser/Registration/register_content.html.twig" %}

覆盖 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

Finally, you are ready to render login and registration view on the same page, multiple pages, all pages wherever you want :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>

Note: Since overridden views are no more extending FOSUserbundle base layout. You need to manage displaying of errors/messages in your layout.

Check this file for reference: vendor/friendsofsymfony/user-bundle/Resources/views/layout.html.twig

于 2018-07-07T11:05:33.433 回答