Laravel 5.5如何覆盖供应商类?

7
我想覆盖(而不是扩展)一个供应商类。所以每当供应商类被调用时(在供应商代码中),我希望它调用我的自定义类。
看起来我需要在App/Providers/AppServiceProvider中为该类设置别名。
我尝试过这样做:
$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Vendor\VendorName\Class', 'App\Vendor\MyCustomClass');

但这并没有任何作用。

我可以很好地注册我的类:

 $this->app->register(
       'App\Vendor\MyCustomClass'
   );

但是这种方法会失败,因为构造函数依赖于此时不可用的其他变量。我只需要应用程序覆盖对 Vendor\VendorName\Class 的任何调用,并替换为 App\Vendor\MyCustomClass


3
你应该创建自己的服务提供者,扩展目标类并覆盖它。 - felipsmartins
1个回答

11

因此,解决方案是创建一个新的ServiceProvider。

php artisan make:provider MyServiceProvider

在config/app.php中找到Vendor服务提供者, 然后在该ServiceProvider中,在被覆盖的Register方法中添加我的别名。

 $loader->alias('Vendor\VendorName\Class', 'App\Vendor\MyCustomClass');

诀窍在于,您需要首先指定自定义类,然后作为第二个参数指定要重写的类。 - Audiophile
2
对于那些在未来查看此内容的人:不要忘记在Config\App.php文件的提供程序数组中添加您的自定义服务提供程序。感谢我之后再说。 - punk73
这个不起作用,我已经尝试了一切,“vendor\beyondcode\laravel-er-diagram-generator\src\GraphBuilder” => “app\Support\vendor\LaravelGraphBuilder”。 - Fadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接