Отправка события в Laravel 5 на созданную модель

Я хочу создать систему регистрации Laravel, в которую я отправляю электронное письмо для проверки электронной почты после регистрации пользователя. Я попытался добавить событие, отправленное в созданный метод, но получил ошибку

 Fatal error: Non-static method Illuminate\Contracts\Events\Dispatcher::fire() cannot be called statically

Вот что я придумал.

  <?php

namespace App;

use Laravel\Cashier\Billable;
use Laravel\Spark\Teams\CanJoinTeams;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as BaseUser;
use Laravel\Spark\Auth\TwoFactor\Authenticatable as TwoFactorAuthenticatable;
use Illuminate\Contracts\Events\Dispatcher as EventDispatcher;
use Laravel\Spark\Contracts\Auth\TwoFactor\Authenticatable as TwoFactorAuthenticatableContract;

class User extends BaseUser implements TwoFactorAuthenticatableContract
{
use Billable, TwoFactorAuthenticatable,CanJoinTeams;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'email',
'name',
'password',
];

/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = [

];/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'card_brand',
'card_last_four',
'extra_billing_info',
'password',
'remember_token',
'stripe_id',
'stripe_subscription'
];

/**
* Boot the model.
*
* @return void
*/
public static function boot()
{
parent::boot();

static::creating(function ($user) {
$user->token = str_random(30);
});

static::created(function ( $user) {

EventDispatcher::fire('UserCreated');

});
}/**
* Confirm the user.
*
* @return void
*/
public function confirmEmail()
{
$this->verified = true;
$this->token = null;

$this->save();
}

}

Я также попытался изменить код на

  use Billable, TwoFactorAuthenticatable,CanJoinTeams, EventDispatcher;

и замена загрузочной части

 static::created(function ( $user, EventDispatcher $event) {

$event->fire('UserCreated');

});

Но это дало мне еще одну ошибку

App\User cannot use Illuminate\Contracts\Events\Dispatcher - it is not a trait

Как запустить событие после создания модели?

1

Решение

Eloquent уже запускает события жизненного цикла модели, поэтому нет необходимости запускать их самостоятельно. Имя события создается с помощью следующего кода:

$event = "eloquent.{$event}: ".get_class($model);

Поэтому, если вы хотите прослушать созданное событие, вам необходимо прослушать «eloquent.created: App \ User». Обработчик события получит связанный пользователь модель как одна из справиться() параметры.

Если вы хотите отправить собственное событие, вы можете сделать это, используя Событие фасад:

Event::fire('UserCreated', $user);

Вы можете прочитать больше о событиях в Laravel здесь: https://laravel.com/docs/5.1/events

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]