web-dev-qa-db-ja.com

Laravel 4の代替ディレクトリからビューをロードする方法

Laravel 4アプリケーションのルートディレクトリに、フォルダーthemesがあります。themesフォルダー、defaultAzureがあります。これからビューにアクセスするにはどうすればいいですかthemes/default =特定のルートのフォルダー。

Route::get('{slug}', function($slug) {
    // make view from themes/default here
});

私のディレクトリ構造:

-app

-テーマ

--- default

--- Azure

localhost/laravel/app/themes/defaultフォルダーからビューをロードする必要があります。これを説明してください。

29
devo

ここでは、publicフォルダーからプロジェクトにアクセスしていません。これの代わりに、プロジェクトルート自体からアクセスしています。

Using alternative path for viewshere に関するフォーラムの議論を見ました。しかし、私はこれについて少し混乱しています。議論された解決策は、

locationのように追加します。

View::addLocation('/path/to/your/views');

次に、テーマにnamespaceを追加し、

View::addNamespace('theme', '/path/to/themes/views');

次に、レンダリングします

return View::make('theme::view.name');

/path/to/の値は何ですか?

パスを変更せずに同じオペレーティングシステムで同じプロジェクトを使用できますか?

はい、次を使用してこれを行うことができます。

以下をapp/start/global.phpに入れます

    View::addLocation(app('path').'/themes/default');
    View::addNamespace('theme', app('path').'/themes/default');

次に、デフォルトの方法のようにビューを呼び出し、

    return View::make('page');

これにより、page.phpフォルダからpage.blade.phpまたはproject_directory/app/themes/defualtファイルがレンダリングされます。

26
devo

これはLaravel 4.で完全に可能です。実際にビュー環境になります。名前空間のヒントまたはFinderがカスケードする追加の場所だけを登録できます。見てみましょう ここで

次のような場所を追加します。

View::addLocation('/path/to/your/views');

ただし、パスが配列に追加されるときに競合するファイル名がある場合に備えて、名前空間を指定すると簡単になります。したがって、適切な一致が見つかるまでカスケードするだけです。名前空間ビューは、二重コロン構文でロードされます。

View::addNamespace('theme', '/path/to/themes/views');

return View::make('theme::view.name');

AddNamespaceには、単一のパスの代わりにビューパスの配列を指定することもできます。

37
Chirag Shah

laravel 5用のテーマパッケージを開発しました。

  • テーマフォルダーのビューとアセットの分離
  • テーマの継承:テーマを拡張し、テーマの階層を作成します

ここで試してください: igaster/laravel-theme

2
igaster

\View::addLocation($directory);は正常に機能しますが、それを行う新しい正しい方法はloadViewsFrom($path, $namespace)(すべてのサービスプロバイダーで利用可能)を使用することです。

0
Mahmoud Zalt