首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雄辩5.7:创造-事件

雄辩5.7:创造-事件
EN

Stack Overflow用户
提问于 2018-11-27 21:15:47
回答 1查看 4.6K关注 0票数 0

我想要自动分配数据到属性(即定制的ID-号),一旦一个新的项目已经创建。

我明白,在下一个框中给出的例子是不幸的,不可能再用雄辩的5.7!

不可能在雄辩的5.7:

代码语言:javascript
复制
use Illuminate\Database\Eloquent\Model as Eloquent;

class Message extends Eloquent {
    ...
    public static function boot() {
        parent::boot();

        self::creating(function ($model) {
            $model->ID = 1234; // 1234 shall be replaced later by a function
        });
    }
    ...
}

用于雄辩5.7:

据我所知,现在我必须定义一个独立的类,并将其在我的模型中链接到所请求的事件,如下所示:

代码语言:javascript
复制
use Illuminate\Database\Eloquent\Model as Eloquent;

class Message extends Eloquent {
    ...
    protected $dispatchesEvents = [
        'creating' => MessageCreated::class,
    ];
    ...
}

但我现在的问题是,我不知道如何创建这个额外的类"MessageCreated“。我所读和看到的所有教程都是使用整组Laravel (用技工做一些终端组件)。但在我的要求中,我只安装了说明/雄辩,所以我不知道如何进行。

谢谢你的想法!

时间

EN

回答 1

Stack Overflow用户

发布于 2018-11-27 22:02:16

Illuminate\Database\Eloquent\Model::creating (通过 trait提供)在Laravel框架的5.7版本中仍然支持向dispatcher注册创建模型事件。

在模型的事件映射中设置事件类的另一种方法允许为创建模型事件分派自定义事件。

事件类MessageCreated只是一个PHP类,其构造函数在本例中传递给雄辩的模型实例。

这意味着,在你决定保留它的地方,由你来判断。

例如,假设MessageCreated.php是在App\Events命名空间中的app/Events文件夹中添加的;其内容将是

代码语言:javascript
复制
<?php
// app/Events/MessageCreated.php

namespace App\Events;

use App\Message;

final class MessageCreated
{
    public function __construct(Message $message) {
        $this->message = $message;
    }

}

在这种情况下,可以在MessageCreated事件的构造函数中添加消息ID;我不能轻易地在那里完成它,因为一个事件不应该改变它的有效负载。

侦听器可以在EventServiceProvider中注册,以处理此类事件。

侦听器可以在app/Listeners文件夹中创建。例如:

代码语言:javascript
复制
<?php
// app/Listeners/AddMessageId.php

namespace App\Listeners;

class AddMessageId
{
    public function handle($event)
    {
        $event->message->ID = 1234;
    }
}

app/providers/EventServiceProvider.php中,在listen属性中注册事件侦听器。

代码语言:javascript
复制
protected $listen = [
    'App\Events\MessageCreated' => [
        'App\Listeners\AddMessageId',
    ],
];

有一些内置工具可以用来创建事件类。以这种方式创建的类在App\Events中具有名称空间。

运行以下命令引导MessageCreated类;您只需要填充实现。

代码语言:javascript
复制
php artisan make:event MessageCreated

php artisan make:listener AddMessageId
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53508248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档