2013-06-20 17 views
5

sto utilizzando Symfony 2.3.1 (questo problema era presente anche in 2.2) con session.handler.pdo, ma quando aggiungo un messaggio bag Flash in questo modo:Symfony2 sessione DOP con Flashbag

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

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

Non viene visualizzato nella home page dopo il reindirizzamento finché non faccio clic su Aggiorna, quindi viene visualizzato. Quindi sta prendendo 2 richieste da mostrare. Se cambio la memoria di sessione di nuovo in nativo questo problema è andato. Qualche idea per cui questo sta accadendo?

Io uso il seguente per stampare i messaggi in Twig

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

ed i miei servizi è la stessa la documentazione come segue:

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

risposta

0

provare a cambiare get('session') con getSession(). Spero che funzionerà.

1

Ho avuto una simile sessione di memcache. Ci possono essere condizioni di gara.

Quando il flash di scrittura e reindirizzare sequenza può essere:

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

Nel mio caso soluzione stava aggiungendo basso nella 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; 
} 
1

Ho lo stesso problema quando uso swiftmailer e ho ottenuto un quickfix per questo problema.

Se si utilizza SwiftMailer in questa azione, provare a rimuovere la riga di spool nel file di configurazione.

Questo non è il modo migliore per risolverlo, ma funziona.

Ancora lavorando e pensando in una soluzione migliore qui ...