2017-01-24 7 views
1

私は現在、Laravelがフラッシュデータを扱うのと同様に、セッションデータをフラッシュする方法を実装しようとしています。私は、Laravelがsession_startのような関数によって呼び出されているネイティブセッションメソッドをオーバーライドすることを知っています。Laravelはセッションフラッシュデータをどのように設定しないのですか?

セッションのためにopenreadwriteなどのカスタムメソッドを作成することで、symfonyのHttp foundationパッケージでこれを行うようです。これはsession_set_save_handlerを使用して行われます:あなたは、あなたがセッションを開始またはセッションへの書き込みがあったときのために開いているロジックを実装することができ、その関数を使用することにより

http://php.net/manual/en/function.session-set-save-handler.php

。しかし、これまでのところ、フラッシュデータが設定されていないLaravelコードベースで直接ロジックを見つけることはできません。

セッションのwrite機能の直前にフラッシュデータを設定解除することは意味があります。このようにして、将来のリクエストではその設定を解除し、コードの終了時にのみ確実に実行されます。

Laravelがセッションのフラッシュメッセージをどのように処理するか教えてもらえますか?

答えて

2

Illuminate\Session\Storeクラスには、セッションが保存されるときに呼び出されるsaveメソッドがあります。本質的にはsession_set_save_handlerと言います。 $this->ageFlashData();メソッドが呼び出されるその行に

https://github.com/laravel/framework/blob/7acc98e112cce4e04f30c7ee4fc0a53dbc5c425b/src/Illuminate/Session/Store.php#L261

方法は、次のコード

$this->forget($this->get('_flash.old', [])); 
    $this->put('_flash.old', $this->get('_flash.new', [])); 
    $this->put('_flash.new', []); 

ので、ページの呼び出しですべてのフラッシュデータは_flash.newに保存されているが含まれています。 セッションが保存されると、_flash.oldのすべてのデータが消去され、_flash.newに格納されたデータはすべて_flash.oldに移動されます。 _flash.newを使用すると、フラッシュメッセージを維持したい場合は、AJAX呼び出しにたとえば、あなたが戻って_flash.oldですべてを動かすセッションストアでreflash()メソッドを使用することができ、次のページのコール

のために新しいデータを保存する用意があります_flash.new

+1

ajaxリクエストやリダイレクトが行われるとどうなりますか? Laravelもフラッシュデータを古いものに移行するのか、それともそこにチェックが入っていますか?私はあなたがajax要求やリダイレクトのような何かがフラッシュデータが設定されていない場合、望ましくない動作を起こす可能性があると思います。 –

+1

ajax呼び出しでは、フラッシュデータは_flash.oldに移動されます。 StartSessionミドルウェアでこれを見ることができます。次回のリクエストでフラッシュデータを保持したい場合は、 'reflash'メソッドを使用することができます –

関連する問題