3

我正在使用 FOSUserBundle 来管理我的网站用户。我的目标是让登录表单显示在基于 boostrap 框架的模式窗口中。Down是我的模态窗口代码

<div class="modal hide" data-backdrop="static" id="login">
    <div class="modal-header"> <a class="close" data-dismiss="modal">×</a>
        <h3>Connexion</h3>
    </div>
    <div class="modal-body" >

    </div>
</div>
<a class="btn btn-primary" data-toggle="modal" data-target="#login" 
   href="{{ path('fos_user_security_login') }}">Sign in</a>

如果用户在输入用户名和密码时没有犯任何错误,则此代码运行良好。如果出现错误,symfony2 会将我直接重定向到/login页面,这是捆绑 FOSUserBundle 提供的极简主义树枝页面。

为了摆脱这个问题,我的想法是监听将再次显示窗口的 javascript 事件。这是通过 window.hashchange 事件完成的。建议的代码是:

<script type="text/javascript" src="{{ asset('jquery/1.9.1/jquery.ba-hashchange.min.js')}}"></script>
<script>
        $(function() {

            // Bind the event.
            $(window).hashchange(function() {
                // Alerts every time the hash changes!
                alert(location.hash);
                if(location.hash === "#login"){
                  $('#login').modal();  
                }
            });

            // Trigger the event (useful on page load).
            $(window).hashchange();


        });
    </script>

这太棒了:通过这段代码,如果我到达这个 url,我就可以显示到登录模式窗口/#login

但是,问题还没有解决,因为symfony中存在路由问题。我害怕必须重写所有捆绑包以在 FOSUserBundle 的控制器中进行重定向。

任何想法?

4

3 回答 3

0

您可以在登录后使用以下命令检查是否有错误:

{% if error %}
    {# do something #}
{% endif %}

这意味着您可以检查是要隐藏模式还是要在页面加载中显示它,如下所示:

<div class="modal{% if not error %} hide{% endif %}">
    <!-- model window -->
</div>
于 2013-04-12T12:07:17.100 回答
0

我解决了覆盖 login.twig.html 并将其放在开头附近的问题

{% if error %}
    <script>
        $('.modal').modal("show");
    </script>
    <div>{{ error|trans }}</div>
{% endif %}

但是当用户单击安全操作并重定向到他单击的链接而不是包含该链接的页面时,我仍然想念如何使此模式出现($request->headers->get('referer ') 尽管首先从安全操作所在的地方重定向)

于 2014-01-06T13:29:07.813 回答
-1

我认为这是使用 FOSUserBundle 登录成功/失败后管理重定向的最佳方法:

Stackoverflow 问题:登录 fos 用户捆绑 symfony 后重定向

基本上,添加一个实现 AuthenticationSuccessHandler 接口的LoginSuccessHandler来对 loginAction 的成功或失败执行不同的操作

于 2016-10-03T09:41:25.670 回答