2

わかりました。まず、この件に関して同様の質問が寄せられていることを知っています。

例: 属性エラーにアクセスできません

しかし、彼らは私の質問に正確には答えていません。作成中のアプリケーションのログイン システムをセットアップしていますが、ログイン認証エラー メッセージを表示しようとするとエラーが発生します。

テンプレートに次のコードがあります。

{% if error %}
    {% block message %}{{ error.message }}{% endblock %}
{% endif %}

これは、テンプレートを呼び出しているコントローラーにあるものです。

public function loginAction()
{
    $request = $this->getRequest();
    $session = $request->getSession();

    // get the login error if there is one
    if($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)){
        $error = $request->attributes->get(
            SecurityContext::AUTHENTICATION_ERROR
        );
    } else {
        $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        $session->remove(SecurityContext::AUTHENTICATION_ERROR);
    }

    return $this->render(
            'SaveSecurityBundle:Security:login.html.twig',
            array(                    
                'last_username' => $session->get(SecurityContext::LAST_USERNAME),
                'error'   => $error,
            )
        );
}

これはかなり単純なはずですが、ログイン フォームを読み込もうとすると、次のメッセージが表示され続けます。

Impossible to access a key ("message") on a NULL variable ("") in SaveSecurityBundle:Security:login.html.twig at line 5

変数のダンプを試みたerrorところ、次のようになりました(実際に必要な部分までの行のみを含めています。実際のダンプは数千行です):

object(Symfony\Component\Security\Core\Exception\BadCredentialsException)#49 (8) {
    ["token":"Symfony\Component\Security\Core\Exception\AuthenticationException":private]=>
object(Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken)#50 
["message":protected]=>
   string(15) "Bad credentials"

したがって、メッセージはそこにありますが、何らかの理由でエラー オブジェクトを渡すことになっているときに、null 参照を渡しています。

これを修正する方法について完全に途方に暮れています。これまでの唯一の解決策は、error印刷物をすべて一緒に削除することでした。これにより、ログインしていない理由をユーザーに通知する機能が削除されます。

4

1 に答える 1

1

問題は、Twig ブロック内でエラー メッセージをレンダリングしていて、ブロックをブロックに入れることができないことifです。条件に関係なくレンダリングされます。

if解決策の 1 つは、ブロックでステートメントをラップすることです。

{% block message %}
    {% if error %}{{ error.message }}{% endif %}
{% endblock %}
于 2013-09-06T09:33:47.757 に答える