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

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

 

Laravelのビューコンポーザの使い方についてまとめました。

 

ビューコンポーザとは

laravelのビューコンポーザとは、
ビュー表示のためのビジネスロジックを記述するところだ。

ビジネスロジックとは簡単にいうと、処理(ロジック)を書いてるところのことで、
何らかの決まったロジックをビューに持たせるために使用される。

書いてある処理はビューのレンダリングの際に自動実行される。

laravelビューコンポーザの画像

 

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

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

本来、laravelなどのMVCモデルのフレームワークにおいて、ロジックはコントローラが担当する部分。ビューの役割は、クライアントへの表示内容を表示することであり、ロジックは書くべきでない。しかし、何かview表示のためだけのロジックを書きたい場合がある。その時、「ロジックをコントローラに書くべきか?」という問題に対して、

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

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

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

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

 

ビューコンポーザの使い方

ビューコンポーザの使い方を早速説明していく。
ビューコンポーザの使い方のポイントを簡単にまとめると、以下のようになる。

ビューコンポーザの使い方まとめ
  1. サービスプロバイダを作成する
  2. サービスプロバイダのbootメソッドに、View::composerメソッドを記述する。

 

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

なぜ理解する必要があるかというと、このサービスプロバイダに、ビューコンポーザを呼びだす処理(View::composerメソッド)を登録しておくことで、ビューが呼び出されたタイミングで、ビューコンポーザが自動的に実行されるようになるからだ。

自動的に呼び出される処理をView::composerメソッドに記載しておくことで、コントローラの領域を侵すことなく、またビューにロジックを書くこともなく、ビューのロジックを実行可能となる。

laravelビューコンポーザの画像

 

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

サービスプロバイダは以下のコマンドで作成できる。
〇〇はアプリ名が通例

php artisan make:provider 〇〇ServiceProvider

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

/app/Providers
サービスプロバイダの配置場所

次に作成したサービスプロバイダをアプリに登録する。
作成したサービスプロバイダは作成しただけだと動いてはくれず、アプリに登録するという作業が作業が必要。と言っても設定ファイルである/config/app.php一行足すだけ。

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

laravel-config-serviceprovider

 

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

書き方は下記

App\Providers\〇〇ServiceProvider::class

以上で①サービスプロバイダの作成の手順は完了。

 

②bootメソッドに、View::composerメソッドを登録

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

serviceprovider-boot

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

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

 

第一引数:処理を実行したいビュー名
第二引数:関数またはクラス。実行したいロジックを記述する。

 

bootメソッド内に以下のメソッドを記述する、
View::composer( ビュー名, 関数またはクラス);

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

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

クロージャの時の使い方と、クラスの時の使い方について順に説明していく。

 

View::composerメソッドの第二引数に、無名関数(クロージャ)を指定する場合

View::composerメソッドの第二引数に、無名関数(クロージャ)を指定する場合は、
単純に無名関数(クロージャ)に、実行したいロジックを記述すれば良い。

use Illuminate\Support\Facades\View;  //追記する

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

 

クロージャの引数には、Illuminate\Support\Facades\View名前空間のViewクラスインスタンスである、$viewを指定すると良い。

上記クラスにはビューを管理するメソッドなどがまとめられおり、特にwithメソッドなんかはよく使う。

$view->with( 変数名, 値);

変数名に対応する値をビューに渡すことができ、ビューでは{{変数名}}という記述で値にアクセスできる。まあこの使い方はlaravelでは馴染みがあると思う。

# ビューコンポーザ
$view->with( 'message', 'HeyHeyHey!!');

# ビュー
<p> {{message}} </p>     //HeyHeyHey!!

 

View::composerメソッドの第二引数に、クラスを指定する場合

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

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

 

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

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

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

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

# /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メソッド
composeメソッドは、サービスプロバイダのbootメソッド内に登録したView::composerメソッドの実行によって呼び出される。

composeメソッドの引数には、Illuminate\View\ViewクラスのView $viewインスタンスを指定する。
これは①クロージャで記述する時と同様の理由だ。

 

②ビューコンポーザを呼び出すための設定をする

作ったビューコンポーザを、View::composerメソッドの第二引数に指定する。
指定の仕方は下記参照(例)

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

第二引数には、ビューコンポーザのnamespace(app\Http\ViewComposer) + クラス名(HelloComposer)を指定する。

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

 

ビューコンポーザまとめ

 

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

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

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

 

 

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

2件のコメント

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

ありがとうございます!!
記事を褒められたの初めてですごく嬉しいです!

コメントを残す

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