浜松のWEBシステム開発・スマートフォンアプリ開発・RTK-GNSS関連の開発はお任せください
株式会社シーポイントラボ
TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:静岡県浜松市中区富塚町1933-1 佐鳴湖パークタウンサウス2F

【Laravel】/resources/views 以外に置いた Blade ファイルを View として呼び出す方法

 Laravel には Blade というテンプレート機能が備わっています。
Bladeテンプレート 8.x Laravel
 Laravel のデフォルトでは blade を使うには /resources/views 以下に .blade.php ファイルを置き、適宜それらをドットキーで呼び出す必要があります。

// 例
Route::get('/', function () {
    return view('greeting', ['name' => 'Finn']);
});

// Mailbleクラスの中で
public function build()
{
    return $this->view('emails.orders.shipped');
}

 これが基本ですが、時には resources/views 以外に置きたい時もあります。例えば次の様なメールクラスとメール本文の Blade を定義する時です。この Blade はこのメールクラス以外で参照されることは決してないと保証される場合、そのメールクラスの近場に置いてくのが便利です。後からメールテンプレートすべてに何々したい、といった時に探すのが resources/views に比べて手間になります(あらかじめファイル名にメール共通のものをつけて探すなど)が、あるメールを書き換える時にメールと本文を同時に参照することがしばしばありますので大体便利です。resources/views 以外に Blade ファイルを置き、それを使う例は次です。

// Mailable
class NotifyHogeMail extends BaseMailable
{
    protected Member $member;

    public function __construct(Member $member)
    {
        parent::__construct();
        $this->member = $member;
    }
    
    public function build(): BaseMailable
    {
        // blade を対象ファイルのフルパスで指定してインスタンス化
        $view = View::file(
            __DIR__.'/MemberHogeMail.blade.php',
            [
                'member' => $this->member,
            ]
        );
        
        // view を解釈してくれるメソッドに view インスタンスをパス
        return $this->text($view)
            ->to($this->member->email)
            ->subject('件名');
    }

 この様にすると

NotifyHoge
    └─Mail
        ├─NotifyHogeMail.blade.php
        └─NotifyHogeMail.php

 の様にパッケージ的に複数クラスとまとめて blade を置いたりできるようになります(↑では Hoge の通知について NotifyHoge/Mail 以外にも NotifyHoge ディレクトリ以下に色々ある想定 )。

  • この記事いいね! (0)