IT系バンドマンの日常

備忘録やライフログなど

Laravelでbladeに引数を渡すときの処理の違いについて調べた

はじめに

先日、後輩にBladeにdataを渡すとき、view関数の第2引数で渡す場合と、withメソッドを使って渡す場合の処理の違いについて質問されたので調べました。
せっかくだし忘れる前に記事にしておこうと思ったのが今回のモチベーションです。

調査結果

viewの第2引数に配列を渡してBladeに渡す場合

return view('template-name', [ 'products' => Product::all() ]);

調べた結果

こちらに関しては配列をviewInstance生成時に渡して、 Illuminate\View\View::__construct の中で自身のメンバ変数 data に渡してるだけっぽかった

https://github.com/laravel/framework/blob/035a0b2e2da129bac2756b1ee3ee10bb8bcda569/src/Illuminate/View/Factory.php#L135

withでdataをBladeに渡す場合

return view('template-name')->with('products', Product::all());

調べた結果

withに関しては、 viewのinstanceを生成したあと、インスタンス内部の関数を呼んで $this-data に値をセットしてるみたいだった

https://github.com/laravel/framework/blob/035a0b2e2da129bac2756b1ee3ee10bb8bcda569/src/Illuminate/View/View.php#L181

まとめ

つまり理由がなければどちらを使ってもよいって感じでした