zoukankan      html  css  js  c++  java
  • laravel模型事件的基本应用

    laravel模型事件的基本应用

    1、创建观察者(-m 指定依赖注入绑定的模型)

     php artisan make:observer UserObserver -m Models/Users

    2、在模型类中添加此方法(boot方法)

    <?php
    
    namespace AppModels;
    
    use AppObserversUserObserver;
    use IlluminateFoundationAuthUser as Authenticatable;
    use IlluminateNotificationsNotifiable;
    use IlluminateDatabaseEloquentSoftDeletes;
    use TymonJWTAuthContractsJWTSubject;
    
    class Users extends Authenticatable implements JWTSubject
    {
        use  Notifiable, SoftDeletes;
    
        //使用laravel提供的模型类初始化方法  
        // 此方法 是所有方法中最早执行的
        protected static function boot()
        {
            parent::boot();
            //注册自定义观察类
            self::observe(UserObserver::class);
        }
    
        public $table = 'users';
    
        // const CREATED_AT = 'created_at';
        // const UPDATED_AT = 'updated_at';
    
    
        //设置添加的字段   create 添加数据有效
        //黑名单  拒绝哪些字段不能被添加的
        protected $guarded = [];
        //指定软删除标识字段
        protected $dates = ['deleted_at'];
        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password',
        ];
    
    
        //实现 JWTSubject 以下两个接口函数
        public function getJWTIdentifier()
        {
            return $this->getKey();
        }
    
        public function getJWTCustomClaims()
        {
            return [];
        }
    }
        

    3、观察者类中的代码

    <?php
    
    namespace AppObservers;
    
    use AppModelsUsers;
    use Log;
    
    class UserObserver
    {
        /**
         * 添加之前执行的方法
         *
         * @param  AppModelsUsers  $users
         * @return void
         */
        public function creating(Users $users)
        {
            //加密  密码
            $users->password = bcrypt($users->password);
        }
    
        /**
         * Handle the users "updated" event.
         *
         * @param  AppModelsUsers  $users
         * @return void
         */
        public function updated(Users $users)
        {
            //
        }
    
        /**
         * Handle the users "deleted" event.
         *
         * @param  AppModelsUsers  $users
         * @return void
         */
        public function deleted(Users $users)
        {
            //
        }
    
        /**
         * Handle the users "restored" event.
         *
         * @param  AppModelsUsers  $users
         * @return void
         */
        public function restored(Users $users)
        {
            //
        }
    
        /**
         * Handle the users "force deleted" event.
         *
         * @param  AppModelsUsers  $users
         * @return void
         */
        public function forceDeleted(Users $users)
        {
            //
        }
    }

    4、此例子中是用模型事件的creating方法来进行密码的加密操作,

    模型事件有:retrieved、 creating、 created、 updating、 updated、 saving、 saved、 deleting、 deleted、 restoring 和 restored。除了加密密码,还可以做一些异步队列的处理,比如用户注册完账号后,可以在created方法中执行给新注册的用户发邮件操作,发邮件的操作结合队列,这样一整套流程就走通了。

  • 相关阅读:
    CSS快速入门
    Kafka (一) 核心概念
    软件工程模型
    函数式编程
    spark计算操作整理
    HBase 文件合并
    HBase 数据存储结构
    目的论浅谈
    PHP8的注解
    JS的移入移除
  • 原文地址:https://www.cnblogs.com/zqblog1314/p/14458334.html
Copyright © 2011-2022 走看看