2018/03/31

Laravel学习随记


维护

维护 php artisan down 执行完毕后会在 storage/framework目录下生成一个 down 文件,此文件就是用于展示维护的信息。当用户访问时,会通过第一个中间件\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,此中间件就是用于判断当前是否处于维护中,如果维护中则输出维护页面。

注意:在维护过程中,队列程序将会暂时挂起,等待维护完毕才会继续运行。所以我们在维护中时,就算运行 php artisan queue:work --queue=high,low 也将不会有任何效果。

维护完毕执行 php artisan up


队列

如果我们采用redis队列,那么两个laravel项目产生的队列内容将都放到了redis队列中,当其中一个laravel执行队列处理时,将会无视哪个项目添加的队列,都将取出处理,这样会出现不同项目队列混乱的问题,解决方法有两种:

  • 1 存储队列改成mysql,这样每个项目的队列存放到各自的数据库中
  • 2 一个redis只能服务于一个项目

中间件

laravel默认开启了一些系统全局中间件,他们的作用分别是

全局中间件

CheckForMaintenanceMode::class 检查当前是否处于维护状态,如果是则返回维护页面信息,如果需要自定义维护页面信息请参考上面
ValidatePostSize::class 检查post数据的大小是否大于php.inipost_max_size参数设置的大小,如果是则返回异常
TrimStrings::class 检查http请求的数据,如果是字符串,则去除字符串首尾处的空白字符
ConvertEmptyStringsToNull::class 检查http请求的数据,如果数据为字符串并且是空字符串,则将其设置为null
TrustProxies::class 自定义代理内容,暂时未研究如何使用

web中间件

EncryptCookies::class 用于处理对于cookies的加密解密
AddQueuedCookiesToResponse::class 用于给Response的header添加cookies信息
StartSession::class 用于首次请求时创建session信息,处理请求时验证session的有效性,在请求结束时保存session信息
ShareErrorsFromSession::class 返回session的错误信息
VerifyCsrfToken::class 验证CSRF令牌

路由中间件

Authenticate::class 用于验证发出的请求类型
AuthenticateWithBasicAuth::class 用基本的Auth进行验证
SubstituteBindings::class 将路由参数转化为特定对象的组件,它默认可以将特定名称的路由参数转化数据库模型对象
Authorize::class 将请求与模型绑定
RedirectIfAuthenticated::class 验证后重定向
ThrottleRequests::class 限制独立请求者对API的请求频率,超过限制请求次数将会看到返回Too Many Requests,它的判断条件是对于同一个请求API地址,同一个用户如果在指定时间内容请求次数达到了上限,则返回异常

api中间件

'throttle:60,1'ThrottleRequests::class 的别名,后面的60,1是参数,意思是限制请求频率为每分钟60次
'bindings'SubstituteBindings::class 的别名

在日常工作中,我们比较特别注意的几个中间件

CheckForMaintenanceMode::class
ValidatePostSize::class
TrimStrings::class
ConvertEmptyStringsToNull::class
ThrottleRequests::class