如何从 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');
所以我将这个包集成到我的应用程序中,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');