3

FOSUserBundle を使用して Web サイトのユーザーを管理しています。私の目標は、Boostrap フレームワークに基づいてモーダル ウィンドウにログイン フォームが表示されるようにすることです。下はモーダルウィンドウの私のコードです

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

このコードは、ユーザーがユーザー名とパスワードを入力する際に​​間違いを犯さなければ、完全に機能します。/loginエラーが発生した場合、symfony2は、バンドル 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 に答える