1

ユーザーがサインアップしたら、電子メールを確認するために電子メールを送信する 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

モデルが作成されたら、どうすればイベントを発生させることができますか?

4

2 に答える 2