雑多なブログ

音楽や語学、プログラム関連の話題について書いています

Laravelでviewのパスを一時的に変更する。

Laravelを使用していて、一時的にbladeテンプレートの参照ディレクトリを変更したい事があったので、その方法について調べた。
Laravel5〜6にて確認。それ以前のLarvelではやり方が異なる可能性があるので注意。

コントローラーの実装例

public function index()
{
    // 現在のviewの設定を保存する
    $view = view()->getFinder();

    // 変更するビューのパスを定義する
    $paths = [base_path('/resources/custom_views')];

    // ビューのパス設定を変更する
    $tmp_view = new FileViewFinder(app()['files'], $paths);
    view()->setFinder($tmp_view);

    // 一時的に変更したビューパスにあるテンプレートを使って、
    // htmlをレンダリングして変数に代入する。
    $html = view('template', ['value' => '何かの値']);

    dump($html->render());

    // ビューの設定を元に戻す
    view()->setFinder($view);

    // 元のビューパスの /resources/views/index.blade.php を読み込む。
    return view('index');
}

/resources/custom_views/template.blade.php

カスタムビューパスからの読みこみ: {{ $value }}