基本的に 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:
- [PHP]Laravelのビューで@includeしているパーツに値を渡す(View Composers)
- [PHP]Laravelを使ったメールフォームの作り方
- [PHP]Laravelでメールアドレスでもユーザー名(ログインID)でもログインできるようにする
- [PHP]Symfony 4 とデータベースを使ったCRUDアプリケーションの作り方
- [PHP]CakePHP 3のインストールと初期設定
- [PHP]WindowsでHomesteadを使ってLaravel5開発環境を作る(1/2)
- [PHP]Symfonyを使ったメールフォームの作り方
- [PHP]Laravel Valet を使った簡単なローカル環境構築