laravel のblade の old 関数で値が表示されない理由は？


laravel10にて開発を行っています。  
requestを処理して、その結果を表示しています。  
その際の入力情報を表示させようとしているのですが、空欄のままになります。

ネットにあるコードを参考にしながら、コードを作成したのですが原因がわかりません。  
どこに間違いがあるでしょうか？

resultの方は問題なく表示されています。

よろしくお願いします。

[code]

    <!DOCTYPE html>
    <html lang="ja">
    
    <head>
    </head>
    <body>
        <form action="/test" method="post">
        @csrf
        <label for="text">テキスト:</label>
        <textarea id="text" name="text" style="width:30rem;height:10rem">{{ old('text') }}</textarea>
        <button type="submit">送信</button>
    </form>
    <h2>結果</h2>
    {!! $result !!}
    
    </body>
    </html>
    
[/code]

controller側

[code]

    public function test(Request $request)
    {
        $text = $request->input('text');
        // 略
        $result = $this->generateHTMLTable($data);
    
        return view('yahoo_api_test', ['result' => $result, 'text' => $text]);
    }
    
[/code]




return view() で text をそのまま返してるので，そちらを優先して使うと良いと思います．

具体的には，

[code]

    <textarea id="text" name="text" style="width:30rem;height:10rem">{{ $text }}</textarea>
    
[/code]

とすると良さそうです．

追記:

old() ヘルパーは，実際には Request::old() を呼んでいます  
参考:
<https://github.com/laravel/framework/blob/05c7572779746eb30229c52a329b9a079e54c9b1/src/Illuminate/Foundation/helpers.php#L570-L573>

実体の実装は以下です  
<https://github.com/laravel/framework/blob/05c7572779746eb30229c52a329b9a079e54c9b1/src/Illuminate/Http/Concerns/InteractsWithFlashData.php#L16-L21>

[code]

    public function old($key = null, $default = null)
    {
        $default = $default instanceof Model ? $default->getAttribute($key) : $default;
    
        return $this->hasSession() ? $this->session()->getOldInput($key, $default) : $default;
    }
    
[/code]

普通にやってればセッションは使ってると思いますが，今回の場合単に return view() してるだけですのでセッションに何も入ってません．  
したがって view() に渡しているデータ（配列）を使うことになります．

ただし，リダイレクトさせる場合はこの限りではありません．  
return redirect()->withInput() してあげることで，明示的にセッションに Form のデータが Flush されますので
old() でも取れるようになると思います．

withInput() の中身は以下です  
<https://github.com/laravel/framework/blob/05c7572779746eb30229c52a329b9a079e54c9b1/src/Illuminate/Http/RedirectResponse.php#L74-L81>

[code]

    public function withInput(array $input = null)
    {
        $this->session->flashInput($this->removeFilesFromInput(
            ! is_null($input) ? $input : $this->request->input()
        ));
    
        return $this;
    }
    
[/code]

戻したい値だけ戻すこともできますし，何も指定しなければ Form からの入力が全部戻ります．




return view() で text をそのまま返してるので，そちらを優先して使うと良いと思います．

具体的には，

[code]

    <textarea id="text" name="text" style="width:30rem;height:10rem">{{ $text }}</textarea>
    
[/code]

とすると良さそうです．

追記:

old() ヘルパーは，実際には Request::old() を呼んでいます  
参考:
<https://github.com/laravel/framework/blob/05c7572779746eb30229c52a329b9a079e54c9b1/src/Illuminate/Foundation/helpers.php#L570-L573>

実体の実装は以下です  
<https://github.com/laravel/framework/blob/05c7572779746eb30229c52a329b9a079e54c9b1/src/Illuminate/Http/Concerns/InteractsWithFlashData.php#L16-L21>

[code]

    public function old($key = null, $default = null)
    {
        $default = $default instanceof Model ? $default->getAttribute($key) : $default;
    
        return $this->hasSession() ? $this->session()->getOldInput($key, $default) : $default;
    }
    
[/code]

普通にやってればセッションは使ってると思いますが，今回の場合単に return view() してるだけですのでセッションに何も入ってません．  
したがって view() に渡しているデータ（配列）を使うことになります．

ただし，リダイレクトさせる場合はこの限りではありません．  
return redirect()->withInput() してあげることで，明示的にセッションに Form のデータが Flush されますので
old() でも取れるようになると思います．

withInput() の中身は以下です  
<https://github.com/laravel/framework/blob/05c7572779746eb30229c52a329b9a079e54c9b1/src/Illuminate/Http/RedirectResponse.php#L74-L81>

[code]

    public function withInput(array $input = null)
    {
        $this->session->flashInput($this->removeFilesFromInput(
            ! is_null($input) ? $input : $this->request->input()
        ));
    
        return $this;
    }
    
[/code]

戻したい値だけ戻すこともできますし，何も指定しなければ Form からの入力が全部戻ります．

