5

session.handler.pdo を使用して Symfony 2.3.1 (この問題は 2.2 にもありました) を使用していますが、フラッシュ バッグ メッセージを次のように追加すると、次のようになります。

$this->get('session')->getFlashBag()->add(
     'success', "Your message has been sent."
);                

return $this->redirect($this->generateUrl('home'));

リダイレクト後、更新を押すまでホームページに表示されず、表示されます。したがって、表示されるには2つのリクエストが必要です。セッション ストレージをネイティブに戻すと、この問題はなくなります。なぜこれが起こっているのですか?

以下を使用して、Twig でメッセージを出力します

{% for flashMessage in app.session.flashbag.get('success') %}
     {{flashMessage}}
{% endfor %} 

私のサービスは、次のドキュメントと同じです。

services:
    pdo:
        class: PDO
        arguments:
            dsn:      "mysql:dbname=%database_name%"
            user:     %database_user%
            password: %database_password%
        calls:
            - [setAttribute, [3, 2]] # \PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION

    session.handler.pdo:
        class:     Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
        arguments: ["@pdo", %pdo.db_options%]
4

3 に答える 3

1

私はswiftmailerを使用しているときに同じ問題を抱えており、この問題のクイックフィックスを入手しました.

このアクションで SwiftMailer を使用している場合は、構成ファイルでスプール行を削除してみてください。

それはそれを修正する最良の方法ではありませんが、うまくいきます。

ここでより良い解決策を考えて取り組んでいます...

于 2014-02-24T16:51:33.613 に答える
1

memcache セッションでも同様でした。競合状態が発生する可能性があります。

フラッシュの書き込みとリダイレクトのシーケンスは次のようになります。

-client redirects    | -DB saves record
-client accesses     |
 the redirected URL  |
                     | -DB completes saving
-client refreshes    |

私の場合、回避策は以下を に追加することでしたAppKernel.php

public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
{
    $response = parent::handle($request, $type, $catch);

    if ($type == HttpKernelInterface::MASTER_REQUEST) {
        if ($this->getContainer()->get('session')->isStarted()) {
            //explicitly save session before returning $response
            $this->getContainer()->get('session')->save();
        }
    }

    return $response;
}
于 2014-01-24T06:53:12.187 に答える
0

で変更get('session')してみてくださいgetSession()。それがうまくいくことを願っています。

于 2013-09-10T06:29:16.010 に答える