我想要自动分配数据到属性(即定制的ID-号),一旦一个新的项目已经创建。
我明白,在下一个框中给出的例子是不幸的,不可能再用雄辩的5.7!
不可能在雄辩的5.7:
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:
据我所知,现在我必须定义一个独立的类,并将其在我的模型中链接到所请求的事件,如下所示:
use Illuminate\Database\Eloquent\Model as Eloquent;
class Message extends Eloquent {
...
protected $dispatchesEvents = [
'creating' => MessageCreated::class,
];
...
}但我现在的问题是,我不知道如何创建这个额外的类"MessageCreated“。我所读和看到的所有教程都是使用整组Laravel (用技工做一些终端组件)。但在我的要求中,我只安装了说明/雄辩,所以我不知道如何进行。
谢谢你的想法!
时间
发布于 2018-11-27 22:02:16
Illuminate\Database\Eloquent\Model::creating(通过 trait提供)在Laravel框架的5.7版本中仍然支持向dispatcher注册创建模型事件。
在模型的事件映射中设置事件类的另一种方法允许为创建模型事件分派自定义事件。
事件类MessageCreated只是一个PHP类,其构造函数在本例中传递给雄辩的模型实例。
这意味着,在你决定保留它的地方,由你来判断。
例如,假设MessageCreated.php是在App\Events命名空间中的app/Events文件夹中添加的;其内容将是
<?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文件夹中创建。例如:
<?php
// app/Listeners/AddMessageId.php
namespace App\Listeners;
class AddMessageId
{
public function handle($event)
{
$event->message->ID = 1234;
}
}在app/providers/EventServiceProvider.php中,在listen属性中注册事件侦听器。
protected $listen = [
'App\Events\MessageCreated' => [
'App\Listeners\AddMessageId',
],
];有一些内置工具可以用来创建事件类。以这种方式创建的类在App\Events中具有名称空间。
运行以下命令引导MessageCreated类;您只需要填充实现。
php artisan make:event MessageCreated
php artisan make:listener AddMessageIdhttps://stackoverflow.com/questions/53508248
复制相似问题