Laravel Artisan 事件:生成命令引发致命错误
Posted
技术标签:
【中文标题】Laravel Artisan 事件:生成命令引发致命错误【英文标题】:Laravel Artisan event:generate command throwing a Fatal error 【发布时间】:2021-12-11 01:44:51 【问题描述】:我正在关注 Laravel 5.7 关于事件注册和生成的官方文档:https://laravel.com/docs/5.7/events#generating-events-and-listeners
我有一个EventServiceProvider
,其中定义了以下事件:
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
/**
* The event handler mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\FormBeforeCreate' => [
'App\Listeners\WebhookBeforeCreate',
],
'App\Events\FormAfterCreate' => [
'App\Listeners\NotifyAfterCreate',
'App\Listeners\WebhookAfterCreate',
],
'App\Events\FormBeforeUpdate' => [
'App\Listeners\WebhookBeforeUpdate',
],
'App\Events\FormAfterUpdate' => [
'App\Listeners\NotifyAfterUpdate',
'App\Listeners\WebhookAfterUpdate',
],
'App\Events\FormBeforeDelete' => [
'App\Listeners\WebhookBeforeDelete',
],
'App\Events\FormAfterDelete' => [
'App\Listeners\NotifyAfterDelete',
'App\Listeners\WebhookAfterDelete',
],
'App\Events\FormBeforeSave' => [
'App\Listeners\WebhookBeforeSave',
],
'App\Events\FormAfterSave' => [
'App\Listeners\NotifyAfterSave',
'App\Listeners\WebhookAfterSave',
],
];
/**
* The subscriber classes to register.
*
* @var array
*/
protected $subscribe = [
'App\Listeners\UserEventSubscriber',
];
/**
* Register any other events for your application.
*
* @return void
*/
public function boot()
parent::boot();
错误:
当我运行命令 php artisan event:generate
时,我收到以下错误:
PHP Fatal error: Call to a member function listens() on null in /app/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventGenerateCommand.php on line 35
[Symfony\Component\Debug\Exception\FatalErrorException]
Call to a member function listens() on null
根据文档,它应该这样做:
此命令将生成任何事件或侦听器列在 您的 EventServiceProvider。已经存在的事件和监听器 将保持不变
我不明白我错过了什么,因为我通过搜索网络没有发现任何类似的错误
【问题讨论】:
laravel 5.7??您可能正在查看错误的 laravel 版本 是的,这是一个很大的旧项目,我们仍处于 5.7 中。但是 5.7 文档(在我的问题中链接)表明这个命令应该可以正常工作 移除所有的监听器/事件,再次运行命令,然后一一重新添加? 请发布整个 EventServiceProvider 行号与 github.com/laravel/framework/blob/5.7/src/Illuminate/Foundation/… 上显示的不匹配。确保文件匹配。您可能需要运行composer update
,或删除供应商文件并运行composer install
【参考方案1】:
这是返回 null
的行:
$providers = $this->laravel->getProviders(EventServiceProvider::class);
因此,您的EventServiceProvider
存在一些问题...请尝试使用这个:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\FormBeforeCreate' => [
'App\Listeners\WebhookBeforeCreate',
],
'App\Events\FormAfterCreate' => [
'App\Listeners\NotifyAfterCreate',
'App\Listeners\WebhookAfterCreate',
],
'App\Events\FormBeforeUpdate' => [
'App\Listeners\WebhookBeforeUpdate',
],
'App\Events\FormAfterUpdate' => [
'App\Listeners\NotifyAfterUpdate',
'App\Listeners\WebhookAfterUpdate',
],
'App\Events\FormBeforeDelete' => [
'App\Listeners\WebhookBeforeDelete',
],
'App\Events\FormAfterDelete' => [
'App\Listeners\NotifyAfterDelete',
'App\Listeners\WebhookAfterDelete',
],
'App\Events\FormBeforeSave' => [
'App\Listeners\WebhookBeforeSave',
],
'App\Events\FormAfterSave' => [
'App\Listeners\NotifyAfterSave',
'App\Listeners\WebhookAfterSave',
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
parent::boot();
//
【讨论】:
我进行了编辑以包含完整的 EventServiceProvider。仍然无法使用您粘贴的代码副本..【参考方案2】:我的错,昨天晚上我好像真的很累,我们的项目在 Docker 上运行,我在 docker 外部而不是内部运行命令。
我不知道为什么它特别显示了这个错误,但是一旦我在 docker 中运行该命令,所有文件都会正确生成。
【讨论】:
以上是关于Laravel Artisan 事件:生成命令引发致命错误的主要内容,如果未能解决你的问题,请参考以下文章