0

我已经用 Homestead 安装了 Lumen,我正在尝试实现事件。

文档中它说

.. 在 bootstrap/app.php 文件中取消注释 $app->withFacades() 调用。

要订阅事件,您可以使用 Event::listen 方法

当我从文档中复制粘贴示例代码时,出现下一个错误

Fatal error: Class 'Event' not found in /home/vagrant/project/...

我在 Lumen 文档中找不到任何内容,为什么这不起作用。

Laravel 5 的教程中,我注意到使用该artisan make:event命令创建的 Event 有一个 use 语句,例如use App\Events\Event; That 可能是我需要的缺少的 Event 类,但是如果该工匠命令不存在,应该如何在 Lumen 项目中获取它?

4

4 回答 4

3

我不确定您使用的是哪个版本的 Lumen。在 Lumen 5.2 到 5.4 中,这是创建事件的方式。流明 5.4 事件

app/Events/Event.php(这完全是一个可选类,唯一重要的是使用'SerializesModels')

<?php
namespace App\Events;
use Illuminate\Queue\SerializesModels;
abstract class Event
{
  use SerializesModels;
}

应用程序/事件/ExampleEvent.php

<?php
namespace App\Events;
class ExampleEvent extends Event
{
    /**
     * Create a new event instance.
     * @return void
     */
    public function __construct()
    {
     //
    }
}

现在将 Event 类绑定到 Event 监听器

app/Providers/EventServiceProvider.php

<?php
namespace App\Providers;
use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     * @var array
     */
    protected $listen = [
       'App\Events\SomeEvent' => [
           'App\Listeners\EventListener',
        ],
    ];
}

最后但并非最不重要的一点是,不要忘记取消注释/添加以下行

引导程序/app.php

$app->withFacades();

$app->register(App\Providers\EventServiceProvider::class);
于 2017-05-09T23:32:01.913 回答
0

我相信这归结为:

$app->withFacades();

在 bootstrap/app.php 中不包括作为类别名的事件外观。

添加:

class_alias('Illuminate\Support\Facades\Event', 'Event');

到 Laravel\Lumen\Application.php::withFacades() 修复了这个问题,但由于这是一个核心 Lumen 文件,因此不推荐修复。

于 2015-05-12T16:22:27.990 回答
0

可能听起来很傻,但你有没有use Event;在顶部指定?

取消注释$app->withFacades();已创建别名,但您仍需要导入它。

于 2015-05-29T09:57:44.863 回答
0

问题似乎App\Events\Event;是 Laravel 中存在但 Lumen 脚手架中没有的缺失类。

缺失的类只是一个抽象的空类:

<?php

namespace App\Events;

abstract class Event
{
    //
}

Lumen 文档有一个模棱两可的例子,希望他们将来能纠正这个问题。

<?php

namespace App\Events;

use App\Podcast;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;

class PodcastWasPurchased extends Event
{
    use SerializesModels;

    public $podcast;

    /**
     * Create a new event instance.
     *
     * @param  Podcast  $podcast
     * @return void
     */
    public function __construct(Podcast $podcast)
    {
        $this->podcast = $podcast;
    }
}
于 2015-07-29T14:44:26.010 回答