Laravel View Composer 解决视图公共部分的数据传递
网站开发中,公共部分数据的传递,比如菜单、侧边栏、友情链接之类的。这些公共数据的传递就可以用 view composer 去实现传递,避免里在控制器中重复获取以及传递视图组件需要的数据.
与所有视图共享数据
在服务提供器(AppServiceProvider)中的 boot 方法调用 Illuminate\Support\Facades\View 的 share 方法
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
View::share('key', 'value');
}
public function register()
{
}
{
视图合成器 viewComposer
第一步 定义视图合成器这个类,通常放在 app/Http/ViewComposers
目录下
<php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use App\Models\Category;
class ExampleComposer
{
protected $category;
//使用laravel的依赖注入 自动注入我们需要的类
public function __construct(Category $category)
{
$this->category = $category;
}
public function compose(View $view)
{
// 使用 with 方法注入变量
$view->with('categories', $this->category->all());
}
}
第二步 注册视图合成器
在一个服务提供器中去注册视图合成器 例子是在 AppServiceProvider 中注册的 ,不过推荐是为它们生成一个单独的服务提供器
<? php
.
.
.
public function boot()
{
// 当 Laravel 渲染 goods.index 和 goods.show 模板时,就会使ExampleComposer 这个来注入分类变量
// 同时 Laravel 还支持通配符,例如 goods.* 即代表当渲染 goods 目录下的模板时都执行这个 ViewComposer
\View::composer(
['goods.index', 'goods.show'],
\App\Http\ViewComposers\ExampleComposer::class
);
}
.
.