te17

Laravel ビュー モデルとビュー コンポーザー

(jp) =

先月、Laravel のビュー モデルについて書きました。 投稿に対して多くの良い反応を受け取りましたが、同じ質問が何度も繰り返されました: ビュー モデルは Laravel のビュー コンポーザーとどう違うのですか?

この質問をきっぱりと明確にする時が来ました。

# 作曲家を見る

Laravel でビュー コンポーザーがどのように使用されているかを見てみましょう。 ビュー コンポーザーは、グローバル構成からビューにデータをバインドする方法です。

Laravel のドキュメントでは、次のように説明されています。

ビュー コンポーザーは、ビューがレンダリングされるときに呼び出されるコールバックまたはクラス メソッドです。 ビューがレンダリングされるたびにそのビューにバインドしたいデータがある場合、ビュー コンポーザーはそのロジックを 1 つの場所に整理するのに役立ちます。

ビュー コンポーザーはこのように登録されます。例は Laravel ドキュメントから取得されます。

class ComposerServiceProvider extends ServiceProvider

    public function boot()
    
        View::composer(
            'profile', ProfileComposer::class
        );

        View::composer('dashboard', function ($view) 
            
        );
    
    
    

ご覧のとおり、ビューに変数を追加するために使用できるクラスとクロージャーの両方を使用できます。

コントローラーでビュー コンポーザーを使用する方法を次に示します。

class ProfileController

    public function index()
    
        return new view('profile');
    

見えますか? いいえ、もちろんそうではありません。ビュー コンポーザはグローバル状態のどこかに登録されており、その暗黙の知識がなければ、ビューでどの変数を使用できるかわかりません。

今私は 知る これは小さなプロジェクトでは問題になりません。 あなたが 1 人の開発者で、20 個のコントローラーとおそらく 20 個のビュー コンポーザーしか持っていない場合、すべてが頭の中に収まります。

しかし、開発者が 3 人か 4 人で、数百のコントローラーがあるプロジェクトの場合はどうでしょうか? この暗黙の知識を持たないレガシー プロジェクトを引き継ぐ場合はどうなるでしょうか。

これが、Spatie が大規模なプロジェクトでビュー モデルを使用する理由です。 それらはすべてをより明確にし、コードを保守可能に保つのに役立ちます。

私たちがしていることは次のとおりです。

class ProfileController

    public function index(User $user)
    
        return new view(
            'profile', 
            new ProfileViewModel($user)
        );
    

これで、コントローラー自体から、ビューで使用できる変数が明確になりました。 複数のコンテキストで同じビューを再利用することもできます。 例として、作成アクションと編集アクションで使用される同じフォーム ビューがあります。

最後に追加されたもう 1 つの利点は、考えもしなかったかもしれませんが、データをビュー モデルに明示的に渡すことができることです。 ビューに渡されるデータを決定するためにルート引数またはバインドされたモデルを使用する場合は、明示的に行われます。

結論として、グローバルな状態を管理することは、特に同じプロジェクトで複数の開発者と作業している場合、大規模なアプリケーションでは苦痛です。 また、2 つの手段の最終結果が同じだからといって、それらが同じであるとは限らないことも覚えておいてください。

この簡単な記事が、ビュー モデルとコンポーザーの違いに関するすべての質問に答えてくれることを願っています。 特にビュー モデルについて詳しく知りたい場合は、こちらのブログ投稿を必ずお読みください。

次の投稿
冬の間南に飛ぶ鳥 10 羽 (とそうでない鳥 5 羽) を発見
前の投稿
ミシシッピ川には何種類の魚が住んでいますか?

ノート:

AZ: 動物の世界、ペット、ペット、野生の自然に関するカテゴリー記事…
SP:スポーツカテゴリー。
New vs Ne: ニュースコラム。
Te: テクノロジー カテゴリ。
Gt:エンターテインメントカテゴリー。
Bt: 占い、星占い、超常現象、超常現象。
Ta:人生コラム。