如何修改Laravel FormRequest验证实现场景验证

  介绍

这篇文章将为大家详细讲解有关如何修改Laravel FormRequest验证实现场景验证,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在Laravel中,很多创建和编辑的的接口都是需要做数据验证的,对于数据验证一般有2种方方式

<李>

在控制器里直接使用请求的验证方法

<李>

使用自定义<强> FormRequest 类,该类集成自<强> Http请求\

如果使用第一种方法,会比较乱,看起来不够优雅

但是如果使用第二种方式,那么针对每一种请求都要定义一个FormRequest

比如:<强> ArticleStoreRequest 和<强> ArticleUpdateRequest

但是你会发现基本上验证规则是一样的,当然你可以在控制器方法里只注入一个请求,但是如果针对于一个模型有多个更新的那种,比如用户模块,修改密码/修改昵称/修改头像/修改地址/修改……怎么处理呢

所以这几天针对这种情况,改进了下Laravel的请求机制,加了一个场景验证

& lt; php ?      namespace 应用\ Http \请求;      use 照亮\ \ Http \ FormRequest基础;   use 阐明\ \ Str的支持;/* *   ,*使用方法:   ,* Class  AbstractRequest   ,* @package 应用\ Http \请求   ,*/class  AbstractRequest  extends  FormRequest   {   ,,,public  scenes 美元;=,[];   ,,,public  currentScene美元;,,,,,,,,,,,,,,,//当前场景   ,,,public  autoValidate 美元;=,假的,,,,,,,,//是否注入之后自动验证   ,,,public  extendRules美元;      ,,,public  function 授权()   ,,,{   ,,,,,,,return 真实;   ,,,}      ,,,/* *   ,,,,*,设置场景   ,,,,*,@param  $场景   ,,,,*,@return 这一美元   ,,,*/,,,public  function 场景(场景)   ,,,{   ,,,,,,,这个→美元currentScene =,美元的场景;   ,,,,,,,return 美元;   ,,,}      ,,,/* *   ,,,,*,使用扩展规则   ,,,,*,@param  string  $的名字   ,,,,*,@return  AbstractRequest   ,,,*/,,,public  function  ($ name =, & # 39; & # 39;)   ,,,{   ,,,,,,,if  (is_array(名字)美元),{   ,,,,,,,,,,,这个→美元extendRules =, array_merge ($ this→extendRules[],,到function  (v), {   ,,,,,,,,,,,,,,,return  Str:骆驼(v);   ,,,,,,,,,,,},,名字)美元);   ,,,,,,,},else  if  (is_string(名字)美元),{   ,,,,,,,,,,,这个→美元extendRules [],=, Str:骆驼($名称);   ,,,,,,,}      ,,,,,,,return 美元;   ,,,}      ,,,/* *   ,,,,*,覆盖自动验证方法   ,,,*/,,,public  function  validateResolved ()   ,,,{   ,,,,,,,if  ($ this→autoValidate), {   ,,,,,,,,,,,这个→美元handleValidate ();   ,,,,,,,}   ,,,}      ,,,/* *   ,,,,*,验证方法   ,,,,*,@param  string  $场景   ,,,,*,@throws  \照亮\ Auth \ \ AuthorizationException访问   ,,,,*,@throws  \照亮\ \ ValidationException异常验证   ,,,*/,,,public  function 验证($ scene =, & # 39; & # 39;)   ,,,{   ,,,,,,,if (场景),{   ,,,,,,,,,,,这个→美元currentScene =,美元的场景;   ,,,,,,,}   ,,,,,,,这个→美元handleValidate ();   ,,,}      ,,,/* *   ,,,,*,根据场景获取规则   ,,,,*,@return 数组|混合   ,,,*/,,,public  function  getRules ()   ,,,{   ,,,,,,,rules 美元;=,$ this→→容器调用(($ this, & # 39;规则# 39;]);   ,,,,,,,newRules 美元;=,[];   ,,,,,,,if  ($ this→extendRules), {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何修改Laravel FormRequest验证实现场景验证