【问题标题】:How to override vendor method in laravel 5.7?如何在 laravel 5.7 中覆盖供应商方法?
【发布时间】:2019-11-23 03:08:42
【问题描述】:

我尝试覆盖供应商类的方法:

namespace App\Providers\Rewritten;

use Illuminate\Queue\DatabaseQueue;

class MyDatabaseQueue extends DatabaseQueue
{

    protected function buildDatabaseRecord($queue, $payload, $availableAt, $attempts = 0)
    {
        //my code here
    }
}

我尝试像这样在 AppServiceProvider 中注册别名:

$loader = AliasLoader::getInstance();

$loader->alias(
            'Illuminate\Queue\DatabaseQueue',
            'App\Providers\Rewritten\MyDatabaseQueue'
        );

然后我有错误消息:

Class 'Illuminate\Queue\DatabaseQueue' not found

但是为什么呢?我不明白。 有人可以帮忙吗?

【问题讨论】:

  • 运行composer dumpautoload, php artisan cache:clear
  • 谢谢,@MianHaseeb 这是解决我的问题!
  • @Buboon 如果对您有帮助,请接受我的回答
  • @MianHaseeb 对不起,我的朋友,这是行不通的。没有找到相同的错误。
  • 这能回答你的问题吗? Laravel 5.5 Override vendor class

标签: laravel


【解决方案1】:

您对 alias() 方法的参数顺序错误。而不是:

$loader->alias(
    'Illuminate\Queue\DatabaseQueue',
    'App\Providers\Rewritten\MyDatabaseQueue'
);

你需要切换它们:

$loader->alias(
    'App\Providers\Rewritten\MyDatabaseQueue',
    'Illuminate\Queue\DatabaseQueue'
);

第一个参数是你的类,第二个参数是别名,这意味着旧的类名将是你的新类的别名。

【讨论】:

  • 很好,如果是真的。我建议提供一个指向文档或 API 参考的链接。
【解决方案2】:

尝试在 AppServiceProvider.php 中添加use Illuminate\Queue\DatabaseQueue;

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 2018-06-04
    • 2018-04-08
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2020-07-05
    • 2021-04-22
    • 1970-01-01
    相关资源
    最近更新 更多