Php 如何在Laravel 5.5中扩展供应商包服务提供商

Php 如何在Laravel 5.5中扩展供应商包服务提供商,php,laravel,laravel-5,Php,Laravel,Laravel 5,我正在使用一个集成Xero accounting的包 他们在以下位置有一个名为XeroServiceProvider.php的文件:/vendor/drawmycattention/xerolarvel/Providers/XeroServiceProvider.php 我需要在我的应用程序中扩展此服务提供商,但我不喜欢直接编辑此文件的想法 是否有一种方法可以在不更新供应商文件的情况下轻松扩展此服务提供商 以下是我需要扩展的文件: namespace DrawMyAttention\XeroLa

我正在使用一个集成Xero accounting的包

他们在以下位置有一个名为
XeroServiceProvider.php
的文件:
/vendor/drawmycattention/xerolarvel/Providers/XeroServiceProvider.php

我需要在我的应用程序中扩展此服务提供商,但我不喜欢直接编辑此文件的想法

是否有一种方法可以在不更新供应商文件的情况下轻松扩展此服务提供商

以下是我需要扩展的文件:

namespace DrawMyAttention\XeroLaravel\Providers;

use Illuminate\Contracts\Filesystem\Filesystem;
use Illuminate\Support\ServiceProvider;
use \App\Invoice;

class XeroServiceProvider extends ServiceProvider
{
    private $config = 'xero/config.php';

    public function boot()
    {
        $this->publishes([
            __DIR__.'/../config.php' => config_path($this->config),
        ]);
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('XeroInvoice', function(){
           //return new \XeroPHP\Models\Accounting\Invoice();
           return new Invoice();
        });

    }
}

运行php artisan make:provider ExtendedXeroServiceProvider

将其添加到
提供者下的
/config/app.php

打开
/app/Providers/ExtendedXeroServiceProvider.php

扩展服务提供商
更改为
扩展XeroServiceProvider

使用DrawMyAttention\Xerolarvel\Providers\XeroServiceProvider
添加到它

将原始服务提供商添加到
/composer.json

编辑

在撰写本文时,
drawmyattention/xerolarvel
软件包不使用自动发现,但如果使用自动发现,则可以将其添加到
composer.json

"extra": {
    "laravel": {
        "dont-discover": [
            "DrawMyAttention\\XeroLaravel\\Providers\\XeroServiceProvider"
        ]
    }
},

基于@Quezler答案

  • 我尝试使用名称空间添加提供程序(类),然后运行composer dump autoload,但没有成功

  • 我尝试添加第三方软件包(名称),然后运行composer dump autoload,然后就成功了


  • 可以除了发现号黑名单上的那一点外,我一直在关注这一切。。。我到底要添加什么?我仔细检查了一下,您不需要该特定软件包的黑名单(因为如果该软件包使用autodiscovery,它将尝试同时加载该软件包的正常版本+您的扩展版本,因此在这种情况下,您需要将其列入黑名单,但这是另一个软件包的故事:)工作得非常出色。谢谢你关于“不要发现”的文档: