【问题标题】:How do you extend a view from a package in Laravel?你如何从 Laravel 的包中扩展视图?
【发布时间】:2017-09-28 03:27:11
【问题描述】:

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

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

【问题讨论】:

    标签: laravel laravel-blade vendor


    【解决方案1】:

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

    php artisan vendor:publish
    

    它在幕后所做的是查找所有包的服务提供者指令,以找出任何应该“发布”的内容(意味着从供应商文件夹复制到 config/、views/ 等)

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

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

    所以,您基本上应该点击命令 php artisan vendor:publish,它会将视图、翻译、公共和迁移文件夹复制到您自己的应用程序文件夹中。

    然后您将在您的资源/视图中看到一个供应商文件夹,其中现在将包含ticketit 视图。

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

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

    【讨论】:

    • 意思是如果包没有正确的发布说明,扩展视图的唯一方法是复制和粘贴它?
    • 我想这会奏效。或者也许做一个公关和编辑图书馆?! :p
    【解决方案2】:

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

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

    仅发布票务视图(目标: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 web 资源(js、css、..)文件(目标:public_path/vendor/ticketit

    【讨论】:

      【解决方案3】:

      对于遇到此问题的任何人,解决方案是 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');

      【讨论】:

        猜你喜欢
        • 2023-03-28
        • 1970-01-01
        • 2021-06-01
        • 2015-02-26
        • 2018-02-18
        • 1970-01-01
        • 2018-06-08
        • 2017-05-05
        • 1970-01-01
        相关资源
        最近更新 更多