如何在Laravel Lumen中实现事件

时间:2015-05-06 08:45:05

标签: php events laravel lumen

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

the documentation中说

  

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

     

要订阅某个活动,您可以使用Event :: listen方法

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

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

我无法在Lumen文档中找到为什么这不起作用。

tutorial for Laravel 5上我注意到使用artisan make:event命令创建的事件有一个像use App\Events\Event;这样的用法语句 这可能是我需要的缺少的事件类,但是如果那个工匠命令不存在,应该如何在Lumen项目中获得它?

4 个答案:

答案 0 :(得分:1)

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

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

[JsonIgnore]

应用/活动/ ExampleEvent.php

using Newtonsoft.Json;

现在将Event类绑定到

中的Event侦听器

应用/提供者/ EventServiceProvider.php

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

最后但并非最不重要,不要忘记在

中取消注释/添加以下行

<强>自举/ app.php

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

答案 1 :(得分:0)

我认为这归结为:

$ APP-&GT; withFacades();

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

添加:

class_alias(&#39; Illuminate \ Support \ Facades \ Event&#39;,&#39; Event&#39;);

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

答案 2 :(得分:0)

可能听起来很傻但是你在顶部指定了use Event;吗?

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

答案 3 :(得分:0)

问题似乎是Laravel中存在的缺少的App\Events\Event;类,而不是Lumen脚手架中的。{/ p>

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

<?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;
    }
}