oldヘルパのデータ元について

Laravel

bladeでよく使うoldヘルパですが、あまりよく分かっていなかったので
新しく学んだことをメモです。

oldヘルパはどこを見ているか

セッションの中の ‘_old_input’ にあるデータを取得しています。

                    '_old_input' => [
                            'key名'=> 'valueデータ', 
                    ],

↑こんな風にセッションデータが入っていると、

old('key名') //'valueデータ

でデータを取り出せます。

_old_inputにデータを保存、取得

oldは’_old_input’ のデータを見ているということが分かりました。

‘_old_input’にデータを保存

もしold()で取得できる値を書き換えたくなった場合、

\Session::flashInput(['key名' => '新しいデータ']);
session()->flash('_old_input', ['key名' =>  '新しいデータ']);

のいずれかで、’_old_input’ のデータを好きな値に書き換えることができます。

old()で’_old_input’の値を取得できない

session()->all()

これで、sessionの _old_input にデータが保存されているのが確認できます。

ただ、sessionに保存されていてもold()で値が取得できない場合があります。

理由:

Symfony\Component\HttpFoundation\Request 内

   public function hasSession(/* bool $skipIfUninitialized = false */)
    {
        $skipIfUninitialized = \func_num_args() > 0 ? func_get_arg(0) : false;

        return null !== $this->session && (!$skipIfUninitialized || $this->session instanceof SessionInterface);
    }

old() は単純にsessionを取ってくるだけではなく、sessionオブジェクトがあるかどうかの確認も行っているようです。

なので、その条件に合致しない場合はセッションデータに関わらずnullが返ります。

ユニットテストなどでリクエストを投げずにoldだけいじろうとすると上手くいかないのは、
このためのようです。。

参考サイト
laracasts
docs

タイトルとURLをコピーしました