zoukankan      html  css  js  c++  java
  • Laravel一些功能的简单总结

    一.事件/广播

    1.命令(事件在目录Events中, 监听器在Listeners中)
    artisan make:event 或 artisan event:generate
    前者创建一个事件,后者根据providers下EventServiceProvider中的$listen数组创建事件和监听器

    2.基本简介
    事件一般对应一个监听器;如果是广播事件,则无需监听器;
    Event如果不是广播事件,则需要对应的Listeners;还需要在EventServiceProvider中进行事件监听器注册.

    3.触发事件
    event(new EventName($model));
    Event::fire(new EventName($model));

    3.使用场景
    事件可以实现广播,如借助pusher实现消息推送
    用户登录时,做一些处理
    浏览文章时将文章浏览数+1等

    4.事件也可以将其队列.但个人认为如果队列的话,其实可以使用jobs的.

    二.任务/队列

    1.默认情形下,任务是同步的;即立即执行.但任务一般都是耗时操作,所以需要将其放入队列.

    2.命令,生成任务(目录jobs)
    artisan make:job JobName

    3.调用任务
    控制器中:
    $this->dispatch();

    其他地方
    use DispatchesJobs;
    ......
    $this->dispatch()

    5.使用场景
    发送邮件等耗时操作或不需要实时执行的操作.

    三.中间件

    1.中间件是为了确保路由或一个控制器中所有方法被允许访问.
    2.在Kenel中注册

    四.策略

    1.策略是为了确保控制器中的某个方法或模板中的某个显示被允许访问.策略是基于model的

    2.生成命令
    artisan make:policy PostPolicy --model=Post

    3.在AuthServiceProvider中进行注册
    protected $policies = [MovieModel::class => MoviePolicy::class];

    3.使用
    a.user模型的can和cant
    b.blade中can或cannot
    c.控制器
    $this->authorize
    d.Gates的allows和denies

    五.Model观察者或事件

    1.Eloquent模型会触发很多事件,可以在AppServiceProvider中进行监听
    creating
    created
    updating
    updated
    saving
    saved
    deleting
    deleted
    restoring
    restored

    示例代码

    class AppServiceProvider extends ServiceProvider
    {
        /**
         * 启动所有应用程序服务。
         *
         * @return void
         */
        public function boot()
        {
            User::creating(function ($user) {
                if (! $user->isValid()) {
                    return false;
                }
            });
        }
    
        /**
         * 注册服务提供者。
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
    

      

    2.也可以对某个模型注册一个事件观察者

    (1).在app下新建Observers目录,创建一个基于MessageModel的消息观察者

    class MessageObserver
    {
        /**
         * @param MessageModel $msg
         */
        public function saved(MessageModel $msg)
        {
            // 更新缓存中消息数目
            $userId = $msg->uid;
            $userGuid = new UserCacheService($userId);
            $userGuid->refreshMsg();
        }
    }
    

      

    (2).在EventServiceProvider的boot方法中进行注册

    public function boot(DispatcherContract $events)
    {
            parent::boot($events);
    	MessageModel::observe(new MessageObserver());
    
    }
    

      

  • 相关阅读:
    《Eclipse中的一些快捷键》
    《Java中的抽象类及抽象类的作用》
    《Java中的不可变类》
    《final修饰基本类型变量和引用类型变量的区别》
    《类成员案例》
    《Java中的单例模式--两种》
    《Java中的自动装箱和拆箱功能.》
    Chrome 经典插件
    Sublimeの虚拟环境(Venv)设置
    HTTP下午茶
  • 原文地址:https://www.cnblogs.com/itfenqing/p/7106698.html
Copyright © 2011-2022 走看看