一.事件/广播

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()); }

  

Laravel一些功能的简单总结的更多相关文章

  1. 浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  2. [转]chrome浏览器中 F12 功能的简单介绍

    本文转自:https://www.cnblogs.com/zhuzhubaoya/p/9758648.html chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己 ...

  3. 【F12】chrome浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  4. ASP.NET中登录功能的简单逻辑设计

     ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计             ...

  5. chrome浏览器中 F12 功能的简单介绍

    chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...

  6. PHP会员找回密码功能的简单实现

    文章来自:博客 http://www.jb51.net/article/91944.htm 设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名 ...

  7. Laravel ServiceProvider注册过程及简单使用

    Laravel ServiceProvider注册过程及简单使用 还记得facade注册流程吗?回顾下 在bootstrap/app.php中返回$app实例后,通过singleton方法绑定了三个实 ...

  8. Laravel 队列功能 简单应用

    生成任务类 默认情况下,应用程序的所有可排队任务都存储在 app/Jobs 目录下.如果 app/Jobs 目录不存在,则会在运行 make:job Artisan 命令时将创建它.你可以使用 Art ...

  9. Laravel五大功能之Eloquent关系模式

    Eloquent是Laravel的原始ActiveRecord是实现的,建立在Laravel的Fluent Query Builder之上的,所以Eloquent类和Fluent类是一样的,能实现复杂 ...

随机推荐

  1. Require.js 详细了解

    一.Require.js 作用 1.1.是JS 文件加载器,实现js脚本的AMD异步加载. 保证不阻塞页面的渲染和其后的脚本的执行,并提供了在加载完成之后的执行相应回调函数的功能. 1.2.实现JS. ...

  2. PHP开发

    php.ini error_reporting=E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_CORE_WARNING & ~E_NOT ...

  3. django怎么自己创建一个中间件

    中间件是什么? 中间件是类似flask函数中钩子函数的东西.可以在请求视图函数前,或者视图函数响应后处理某些事情.中间件对全部视图都有效! 中间件一般会有两个方法,process_request和pr ...

  4. 项目管理软件Readmine安装配置

    1.安装依赖 #yum install curl-devel sqlite-devel libyaml-devel -y 2.安装rvm #curl -L https://get.rvm.io | b ...

  5. SQL注入漏洞原理

    系统中安全性是非常重要的,为了保证安全性很多解决方案被应用到系统中,比如架设防火墙防止数据库服务器直接暴露给外部访问者.使用数据库的授权机制防止未授权的用户访问数据库,这些解决方案可以很大程度上避免了 ...

  6. 洛谷 P2183 [国家集训队]礼物

    题目描述 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会越多.小E从商店中购买了n件礼物 ...

  7. [JOISC2016]サンドイッチ

    题目大意: 一个$n\times m(n,m\leq400)$的网格图中,每个格子上放了两个三明治,摆放的方式分为'N'和'Z'两种.一个三明治可以被拿走当且仅当与该三明治的两条直角边相邻的三明治均被 ...

  8. [BZOJ1179][APIO2009][强连通分量Tarjan+spfa]ATM

    [BZOJ1179][APIO2009]ATM Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i ...

  9. C语言基础之变量、作用域

    1.变量的定义 变量类型 变量名; int score; 2.变量的赋值 score = 100; score = a; score = b = 100; 3.变量的输出 int a = 200; p ...

  10. 在java代码中设置margin

    我们平常可以直接在xml里设置margin,如: <ImageView android:layout_margin="5dip" android:src="@dra ...