(Laravel) ビュー【ビューコンポーザの使い方】

laravel-view-composer

 

LaravelのViewについてのメモ書き、
とくにbladeのビューコンポーザの使い方について

 

ビューコンポーザとは

ビュー表示のための、ビジネスロジックを記述するところ。
書いてある処理はレンダリングの際に自動実行される。

ビジネスロジックとは簡単にいうと、処理(ロジック)を書いてるところ。

 

ビューコンポーザが生まれた経緯(主観あり)

ビューコンポーザは、ビュー表示のためのビジネスロジックを書くところと記述した。

本来、laravelなどのMVCモデルのフレームワークにおいて、ロジックはコントローラが担当する部分。ビューの役割は、クライアントへの表示内容を表示することであり、ロジックは書くべきでない。

しかし、何かview表示のためだけのロジックを書きたい場合がある。
その時、「ロジックをコントローラに書くべきか?」という問題に対して、

→ビューのための処理をコントローラに書くのは、そもそもMVCに反する行為になるのでNG

という、大前提がある。
じゃあ結局どこに書く?

→新しく書くところ作っちゃえ!!

って流れだと思っている。

 

サービスプロバイダ

 

ビューコンポーザを使うために理解する必要があるのが、サービスプロバイダという機能。
アプリ起動に処理を割り込んで実行する(ブートストラップ処理と呼ばれる)ものだ

そして、なぜ理解する必要があるかというと、
このサービスプロバイダに、ビューコンポーザを自動的に呼ぶ設定をする必要があるからだ。

サービスプロバイダが自動的に、登録しておいたビューコンポーザを実行してくれるおかげで、
コントローラの領域を侵すことなく、またビューにロジックを書くこともなく、ビューのロジックを実行可能となる。

 

サービスプロバイダの作成

サービスプロバイダは以下のコマンドで作成できる

php artisan make:provider 〇〇ServiceProvider

〇〇はアプリ名が通例

 

サービスプロバイダが配置される場所

作ったサービスプロバイダは下記に配置される

/app/Providers

 

サービスプロバイダの「boot」メソッド

サービスプロバイダを作成すると、デフォルトで、bootというメソッドが存在する。
このbootメソッドが、アプリ起動に処理を割り込んで実行する(ブートストラップ処理)ところだ。

serviceprovider-boot

 

boot内に「View::composerメソッド」を記述してビューコンポーザを呼び出す

そして、bootメソッド内に、「View::composerメソッド」を記述することで、
自動的にビューコンポーザを呼び出すようにすることができる。

public function boot(){
    View::composer( ビュー名, 関数またはクラス);
}

 

View::composerメソッドは、
第一引数で指定したビューに対して、
第二引数で指定した関数やクラス(ロジック)の結果を渡す。

※View::composerメソッドの説明は後述

 

サービスプロバイダの登録

作成したサービスプロバイダを使えるようにするには、アプリに登録する作業が必要。
と言っても設定ファイルに一行足すだけ。

アプリ設定ファイルである、/config/app.phpを開く。
で、見ていくと「’providers’ =>….」という配列を定義しているところがある。
すでにいくつものサービスプロバイダーが登録されている。

laravel-config-serviceprovider

この配列の最後の方に、「Application Service Providers」と書かれている群がある。
ここに、自分で作成したサービスプロバイダを登録するための一行を追記することで、
サービスプロバイダのアプリへの登録が、完了する。

書き方は下記

App\Providers\〇〇ServiceProvider::class

 

 

View::composerメソッドの使い方

bootメソッド内に記述した、View::composer( ビュー名, 関数またはクラス);というメソッド。

第一引数には、「ロジックの結果を受け取って表示するビュー」を指定する。
指定の仕方は、viewメソッドでビューを指定する時と同様に、「’フォルダ名.ビュー名’」と言った具合に指定する。

第二引数には「無名関数」または「クラス」を指定し、その処理内容に、ビューのロジックを書く。その戻り値が、第一引数で指定したビューへと引き渡されることで、ロジックありのビューを表示することができる。

 

第二引数に、無名関数を指定する場合

単純に無名関数(function(){}のこと)を指定すれば良い

use Illuminate\Support\Facades\View;

public function boot(){
    View::composer( ビュー名, function($view){
        // ここにロジックを書く
    });
}

 

引数に、指定している$viewインスタンスは、Illuminate\Support\Facades\Viewクラスのインスタンスで、viewの管理をするメソッドなどが使用できる。

 

第二引数に、クラスを指定する場合

第二引数にクラスを指定する場合、以下二つの手順を実行する必要がある。

第二引数にクラスを指定する場合
  1. ビューコンポーザクラスを手書きで作成する
  2. ビューコンポーザを作成したら、ビューコンポーザを呼び出すための設定をする

 

①ビューコンポーザクラスを手書きで作成する

まずは呼び出すビューコンポーザクラスを手書きで作成する。

配置する場所は「/app/Http」以下であれば問題ない。
なので/app/Http/にViewComposerというディレクトリを切って作成するとする。

例えば、以下のようなHelloComposer.phpというビューコンポーザを作成。

<?php

namespace App\Http\ViewComposer;
use Illuminate\View\View;

class HelloComposer {

    /**
     * @param View $view
     * @return void
     */

    public function compose(View $view)
    {
      // ビジネスロジック
    }

}

 

上記で大事なのは「compose」メソッド。

サービスプロバイダのbootメソッド内で、View::composerメソッドを記載したが、View::composerメソッドよって呼び出されるのが、このcomposeメソッド

メソッドの引数には、Viewインスタンスを指定する。

 

②ビューコンポーザを作成したら、ビューコンポーザを呼び出すための設定をする

作ったビューコンポーザを、View::composerメソッドの第二引数に指定する。

指定の仕方は下記参照

View::composer( ビュー名, /app/Http/ViewComposer/HelloComposer );

 

これでアプリ起動時、指定したクラス内のcomposeメソッドが自動的に呼び出され、記述されているビジネスロジックが自動実行される。

 

 

ビューコンポーザまとめ

 

ビューのためのビジネスロジックは、ビューコンポーザに書く。

ビューコンポーザは、ビューに渡す情報を処理するロジックを実行し、結果をビューに渡す。

ビューは(なるべく)ビューコンポーザの結果を受けとって表示するだけにする。

 

 

記事が気に入った方はシェアをお願いします!

2 件のコメント

  • ビューコンポーザ難しくて調べてたらここに来ました。
    結局最初から読みましたがまとめ方がとても上手ですね。
    配色とかも関心します。
    ありがとうございました。

  • コメントを残す

    メールアドレスが公開されることはありません。