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()); }
Laravel一些功能的简单总结的更多相关文章
- 浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- [转]chrome浏览器中 F12 功能的简单介绍
本文转自:https://www.cnblogs.com/zhuzhubaoya/p/9758648.html chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己 ...
- 【F12】chrome浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- ASP.NET中登录功能的简单逻辑设计
ASP.NET中登录功能的简单逻辑设计 概述 逻辑设计 ...
- chrome浏览器中 F12 功能的简单介绍
chrome浏览器中 F12 功能的简单介绍 由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首 ...
- PHP会员找回密码功能的简单实现
文章来自:博客 http://www.jb51.net/article/91944.htm 设置思路 1.用户注册时需要提供一个E-MAIL邮箱,目的就是用该邮箱找回密码. 2.当用户忘记密码或用户名 ...
- Laravel ServiceProvider注册过程及简单使用
Laravel ServiceProvider注册过程及简单使用 还记得facade注册流程吗?回顾下 在bootstrap/app.php中返回$app实例后,通过singleton方法绑定了三个实 ...
- Laravel 队列功能 简单应用
生成任务类 默认情况下,应用程序的所有可排队任务都存储在 app/Jobs 目录下.如果 app/Jobs 目录不存在,则会在运行 make:job Artisan 命令时将创建它.你可以使用 Art ...
- Laravel五大功能之Eloquent关系模式
Eloquent是Laravel的原始ActiveRecord是实现的,建立在Laravel的Fluent Query Builder之上的,所以Eloquent类和Fluent类是一样的,能实现复杂 ...
随机推荐
- View的三次measure,两次layout和一次draw
我在<Android视图结构>这篇文章中已经描述了Activity,Window和View在视图架构方面的关系.前天,我突然想到为什么在setContentView中能够调用findVie ...
- nginx部署web.py项目
= =测试环境直接就python index.py就好啦 生产环境nginx + web.py + uwsgi 安装uwsgi... pip install uwsgi 首先把自己的代码小改一下... ...
- Opengl场景中加光照包含几个步骤
http://zuoye.baidu.com/question/44e2a82d7ad5c0e1d33ddb9a40e0bf86.html Opengl场景中加光照包含几个步骤,各个步骤实现用的函数 ...
- 通过hover修改其他元素
hover,我们都知道,是监听组件“悬停状态”的一个伪类. 我们一般通过hover来修改组件的背景什么的,很少涉及到太复杂的操作.也就是说我们一般只是对加了hover伪类的元素自身的样式进行改变,比如 ...
- Openstack celi
http://www.51testing.com/html/76/n-3720076.html
- codeforces-526B
题目连接:http://codeforces.com/contest/526/problem/B B. Om Nom and Dark Park time limit per test 1 secon ...
- java 概括
作者:Dnvce链接:https://www.zhihu.com/question/61950442/answer/441166734来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- hdu 5206 Four Inages Strategy 计算几何
题目链接:HDU - 5206 Young F found a secret record which inherited from ancient times in ancestral home b ...
- [BZOJ1194][HNOI2006][强连通分量Tarjan+dfs]潘多拉的盒子
[BZOJ1194][HNOI2006]潘多拉的盒子 Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语 ...
- SpringAop名词解释+基于xml的配置
1,AOP名词解释 2,AOP演示 (1)导包: (2)准备目标对象 package com.songyan.service; import org.aspectj.lang.ProceedingJo ...