将数据共享到所有视图
有时你需要在许多视图中设置相同的数据。
使用 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.*'
)。