视图
最后更新于:2022-04-01 15:09:06
您扩展包内部的架构全部由您自己规划。然而,原则上会有一个或更多的 服务提供者. 服务提供者包含着所有的 服务容器 绑定,也定义了所有您扩展包的相关配置、视图以及语言文件在什么地方。
## 视图
扩展包的视图基本上使用两个双冒号来指定:
`return view('package::view.name');`
所有您所要做的只有告诉 Laravel 您所配置扩展包名称视图的位置在哪里。如果您的扩展包取名为 “courier” 您可能需要添加如下到您的服务提供者的 boot 方法:
~~~
public function boot()
{
$this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');
}
~~~
现在您可以使用如下的语法来加载扩展包的视图:
`return view('courier::view.name');`
当您使用 loadViewsFrom 方法,Laravel 实际上为了您的视图注册了两个位置。一个是您应用程序的 resources/views/vendor 目录,一个是您指定的目录。所以使用我们的例子 courier 当要求一个扩展包的视图时,Laravel 会第一时间检查是否有一个开发者自行自定义在 resources/views/vendor/courier 的视图存在。然而如果还没有这个路径的视图被自定义。Laravel 会搜索您在扩展包 loadViewsFrom 方法里所指定的视图。这个方法让个别的用户可以方便的自定义且覆写您在扩展包里的视图。
## 视图的发布
发布扩展包的视图到 resources/views/vendor 目录,您必须在服务提供者里的 boot 方法里使用 publishes 方法:
~~~
public function boot()
{
$this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');
$this->publishes([
__DIR__.'/path/to/views' => base_path('resources/views/vendor/courier'),
]);
}
~~~
现在当您扩展包的用户使用 Laravel 的命令 vendor:publish 您的视图目录将会被复制到所特定的目录
如果您想要覆写已存在的文件,可以使用 --force:
`php artisan vendor:publish --force`
> 注意: 您可以使用 publishes 方法,发布任何您的文件到任何您想要的地方。