この目標はさまざまな方法で達成でき、
1. BaseControllerの使用
物事を設定する方法として、BaseController
Laravel独自のを拡張するクラスを作成し、Controller
そこにさまざまなグローバル物事を設定します。他のすべてのコントローラーBaseController
は、Laravelのコントローラーではなく、から拡張されます。
class BaseController extends Controller
{
public function __construct()
{
//its just a dummy data object.
$user = User::all();
// Sharing is caring
View::share('user', $user);
}
}
2.フィルターの使用
アプリケーション全体のすべてのリクエストのビューに何かを設定したいという事実がわかっている場合は、リクエストの前に実行されるフィルターを使用して設定することもできます。これが、LaravelのUserオブジェクトを処理する方法です。
App::before(function($request)
{
// Set up global user object for views
View::share('user', User::all());
});
または
独自のフィルターを定義できます
Route::filter('user-filter', function() {
View::share('user', User::all());
});
簡単なフィルター呼び出しで呼び出します。
バージョン5に従って更新*
3.ミドルウェアの使用
使用するView::share
とmiddleware
Route::group(['middleware' => 'SomeMiddleware'], function(){
// routes
});
class SomeMiddleware {
public function handle($request)
{
\View::share('user', auth()->user());
}
}
4. View Composerの使用
View Composerは、特定のデータをバインドしてさまざまな方法で表示するのにも役立ちます。変数を特定のビューまたはすべてのビューに直接バインドできます。たとえば、独自のディレクトリを作成して、要件に応じてビューコンポーザファイルを保存できます。これらのビューコンポーザーファイルは、サービスを介してビューと対話します。
View composerメソッドはさまざまな方法を使用できます。最初の例は似ています。
App\Http\ViewComposers
ディレクトリを作成できます。
サービスプロバイダー
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
}
}
その後、このプロバイダーを「プロバイダー」セクションのconfig / app.phpに追加します。
TestViewComposer
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class TestViewComposer {
public function compose(View $view) {
$view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
}
}
ViewName.blade.php
Here you are... {{$ViewComposerTestVariable}}
このメソッドは、特定のビューのみに役立ちます。ただし、すべてのビューに対してViewComposerをトリガーする場合は、この単一の変更をServiceProviderに適用する必要があります。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
public function boot() {
view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
}
}
参照
Laravelのドキュメント
さらに明確にするためにLaracastエピソード
それでもわからないことがあれば、私に知らせてください。