[PHP]LaravelでBladeテンプレートの読み込み元を一時的に変更する

Pocket

基本的に Laravel で使われている Blade テンプレートファイルは config/view.php の paths で指定されたフォルダから読み込まれます。配列になっており、先に書いたフォルダから優先的に読み込まれる仕組みです。

単に読み込み先を動的に追加するなら View::prependLocation() や View::addLocation() が用意されているのですが、どちらも読み込み候補の追加であるため、特定のフォルダに限定しているわけではありません。また、この方法で追加されたパスは一時的なものではなく、以降の view() を使う箇所で常に影響します。

指定したフォルダからのみ一時的に読み込むようにするにはこのようにできます。

use Illuminate\Support\Facades\View;
use Illuminate\View\FileViewFinder;

class YourController extends Controller
{
    public function index()
    {
		$app = app();
		// 読み込み元のフォルダを指定
		$paths = [base_path('your/views')];

		// もともとの設定を取得
		$originalFinder = View::getFinder();

		// 新しい設定を適用
		$finder = new FileViewFinder($app['files'], $paths);
		View::setFinder($finder);

		// レンダリング後のビューを文字列として取得
		$str = View::make('hello')->render();

		// 設定をもとに戻す
		View::setFinder($originalFinder);

		return $str;
	}
}

正式にドキュメント化されている手法ではありませんがとりあえず今のところはこれで実現できます。


Similar Posts:




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です