如何从 Laravel 中的包扩展视图?

How do you extend a view from a package in Laravel?

所以我将这个包集成到我的应用程序中,https://github.com/thekordy/ticketit 并且这个包有自己的视图,我想像 create.blade.php 一样修改视图,..我该如何正确地做到这一点?

因为我目前的解决方案只是从包中复制视图更改 return 视图('create');在我的控制器中?

您会注意到许多软件包在其安装过程中包含此命令:

php artisan vendor:publish

它在幕后所做的是查找所有包的服务提供商说明,以便弄清楚它应该是什么"published"(意味着从供应商文件夹复制到配置/、视图/等)

我查看了您包裹的服务提供商: https://github.com/thekordy/ticketit/blob/0.2/src/TicketitServiceProvider.php 从第 179 行到第 182 行,包似乎有正确的 "publish" 说明。

这意味着文档可能跳过了这一部分。

因此,您基本上只需点击命令 php artisan vendor:publish,它就会将视图、翻译、public 和迁移文件夹复制到您自己的应用程序文件夹中。

然后您会在 resources/views 中看到一个 vendor 文件夹,其中现在包含 ticketit 视图。

Laravel 当你说 "view('ticketit.form.index')" 时它会首先在你自己的资源文件夹中查找,如果找不到内容,它会尝试在包的文件夹中查找.

有关更多信息,请阅读文档:https://laravel.com/docs/5.4/packages#views

再补充一点,您可以通过发布命令的标签来选择要发布的资源类型

php artisan vendor:publish --provider="Kordy\Ticketit\TicketitServiceProvider" --tag="views"

仅发布 ticketit 视图(目的地:base_path/resources/views/vendor/ticketit

如果出于任何原因,发现扩展视图还不够,并且想自己扩展功能或控制器,ticketit allows using of custom routes file,您可以使用它来指向您自己的自定义控制器。


其他支持的供应商发布标签:

php artisan vendor:publish --provider="Kordy\Ticketit\TicketitServiceProvider" --tag="lang"

仅发布 ticketit 翻译文件(目标:base_path/resources/lang/vendor/ticketit

php artisan vendor:publish --provider="Kordy\Ticketit\TicketitServiceProvider" --tag="db"

仅发布 ticketit 迁移文件(目标:base_path/database/migrations

php artisan vendor:publish --provider="Kordy\Ticketit\TicketitServiceProvider" --tag="public"

仅发布 ticketit 网络资源(js、css、..)文件(目标:public_path/vendor/ticketit

对于遇到此问题的任何人,解决方案是 Laravel 默认约定,如文档中所示:https://laravel.com/docs/5.4/packages#views(发布视图主题)

总之,你需要使用的资源路径为:

'__DIR__.'/path/to/views' => resource_path('views/vendor/view_namespace)'

其中 view_namespace 是 loadViewsFrom 方法中的第二个参数。

所以给定文件:https://github.com/thekordy/ticketit/blob/0.2/src/TicketitServiceProvider.php

如果第102行是 $this->loadViewsFrom($viewsDirectory, 'ticketit');

第 103 行应该是:

$this->publishes([$viewsDirectory => base_path('views/vendor/ticketit')], 'views');