【问题标题】:Laravel 5.5 Override vendor classLaravel 5.5 覆盖供应商类
【发布时间】:2018-06-04 04:04:20
【问题描述】:

我正在尝试覆盖(而不是扩展)供应商类。所以每当供应商类被调用(在供应商代码中),我希望它调用我的自定义类。

看来我需要在我的 App/Providers/AppServiceProvider 中为该类起别名

我试过了:

$loader = \Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('Vendor\VendorName\Class', 'App\Vendor\MyCustomClass');

但这并没有做任何事情。

我可以很好地注册我的班级:

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

但这会失败,因为构造函数依赖于当时不可用的其他变量。我实际上只需要该应用程序用App\Vendor\MyCustomClass 覆盖对Vendor\VendorName\Class 的任何调用

【问题讨论】:

  • 你应该创建自己的服务提供者扩展目标类并覆盖它。

标签: php laravel


【解决方案1】:

所以解决方案是创建一个新的 ServiceProvider

php artisan make:provider MyServiceProvider

扩展了供应商服务提供者(在 config/app.php 中找到)。在该 ServiceProvider 中,在覆盖的 Register 方法中添加我的别名

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

【讨论】:

  • 诀窍是您需要先指定自定义类,然后再指定要覆盖的类 - 作为第二个
  • 对于那些在未来看它的人:不要忘记在 provider 数组的 Config\App.php 上添加您的自定义服务提供者。稍后谢谢我
  • 这不起作用我做了所有的事情,“vendor\beyondcode\laravel-er-diagram-generator\src\GraphBuilder”=> “app\Support\vendor\LaravelGraphBuilder”
猜你喜欢
  • 2019-04-05
  • 2019-02-20
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
相关资源
最近更新 更多