Illuminate\Database\Eloquent\Model::creating
(доступно через черту Illuminate\Database\Eloquent\Concerns\HasEvents
) для регистрации события создания модели с диспетчером все еще поддерживается в версии 5.7 платформы Laravel.
Этот другой способ установки класса событий в карте событий для модели позволяет отправлять пользовательское событие для события создания модели.
Класс событий MessageCreated
- это просто класс PHP, конструктор которогов этом случае передал экземпляр модели Eloquent.
Это означает, что если вы решите сохранить его, то оставьте на ваше усмотрение.
Например, допустим, что 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
;Я не могу успокоиться с этим, потому что событие не должно изменять его полезную нагрузку.
С помощью 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 AddMessageId