如何在Laravel 5.5

时间:2018-05-07 17:59:20

标签: php laravel laravel-5

我正在使用集成了Xero会计的软件包。

他们在以下位置有一个名为XeroServiceProvider.php的文件:/vendor/drawmyattention/xerolaravel/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();
        });

    }
}

2 个答案:

答案 0 :(得分:5)

运行php artisan make:provider ExtendedXeroServiceProvider

将其添加到./config/app.php

下的providers

打开./app/Providers/ExtendedXeroServiceProvider.php

extends ServiceProvider更改为extends XeroServiceProvider

同时添加use DrawMyAttention\XeroLaravel\Providers\XeroServiceProvider

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

中的发现黑名单

修改

截至撰写本文时,drawmyattention/xerolaravel包不使用自动发现,但如果出现这种情况,可以将其添加到composer.json

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

答案 1 :(得分:0)

基于@Quezler答案

  1. 我尝试使用名称空间添加提供程序(类),然后运行composer dump-autoload,它不起作用

  2. 我尝试添加第三方程序包(名称),然后运行composer dump-autoload然后起作用了