1

ログイン用の認証サービスで RedirectResponse を使用して Flash メッセージを設定しようとしています。

public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
    if($request->isXmlHttpRequest()) {
        return JsonResponse::create([
            'status' => false,
            'message' => $exception->getMessage(),
            'callback' => 'Login.failed'
        ]);
    } else {
        $session = new Session();
        $session->getFlashBag()->set('error', $exception->getMessage());

        var_dump($session->getFlashBag()->all()); die; // Works here.

        return new RedirectResponse('/login');
    }
}

小枝:

{{ dump(app.session.flashbag.all) }}

{% for message in app.session.flashbag.get('error') %}
    <div class="alert alert-danger">{{ message|trans }}</div>
{% endfor %}

小枝テンプレートにメッセージがありません...

私は、redirectresponse がすべてのフラッシュ メッセージをフラッシュするのだろうか?

4

2 に答える 2

2

symfony は魔法のようにすべての Session インスタンスを取得してそれを使用することはできません。それ自体が作成したインスタンスについてのみ認識します。これらはService Containerに存在します。sessionこのコンテナからサービスを取得し、代わりにそれを使用する必要があります。

おそらくサービス内にいるので、サービス定義を次のように更新する必要があります。

services:
    your_service:
        class: ...
        arguments: ["@session"]

ここで、クラスを更新してセッション サービスをプロパティに保存します。

// ...
use Symfony\Component\HttpFoundation\Session\Session;

// ...
class YourClassName
{
    private $session;

    public function __construct(Session $session)
    {
        $this->session = $session;
    }
}

ここで、代わりにプロパティに保存されたセッション インスタンスを使用します。

// ...
public function onAuthenticationFailure(...)
{
    // ...
    $this->session->getFlashBag()->set('error', ...);

    // ...
}
于 2015-04-19T11:01:06.150 に答える