将数据共享到所有视图

有时你需要在许多视图中设置相同的数据。

使用 View::share

// "View" is the View Facade
View::share('shareddata', $data);

在此之后,$data 的内容将在所有视图中以 $shareddata 的名称提供。

View::share 通常在服务提供者中调用,或者可能在控制器的构造函数中调用,因此数据将仅在该控制器返回的视图中共享。

使用 View::composer

视图组合器是在呈现视图时调用的回调或类方法。如果每次呈现视图时都希望将数据绑定到视图,则视图编辑器可以帮助你将该逻辑组织到一个位置。你可以直接将变量绑定到特定视图或所有视图。

基于闭包的作曲家

use Illuminate\Support\Facades\View;

// ...

View::composer('*', function ($view) {
    $view->with('somedata', $data);
});

基于类的作曲家

use Illuminate\Support\Facades\View;

// ...

View::composer('*', 'App\Http\ViewComposers\SomeComposer');

View::share 一样,最好在服务提供商中注册作曲家。

如果使用作曲家类方法,那么你将使用 App/Http/ViewComposers/SomeComposer.php

use Illuminate\Contracts\View\View;

class SomeComposer
{
    public function compose(View $view)
    {
        $view->with('somedata', $data);
    }
}

这些例子在作曲家注册中使用'*'。此参数是一个字符串,与要注册作曲家的视图名称相匹配(*是通配符)。你还可以选择子文件夹下的一组路径的单个视图(例如'home')(例如'users.*')。