lumen手记:自定义Validate表单验证
版权声明:本文为博主原创文章,未经博主允许不得转载。
今天开始跳lumen的表单验证Validate类的坑,确实好坑!!!
首先,lumen的表单验证返回是无状态的json格式api,这...
所有开始搞起,
先来看看官方的方法,验证不通过直接返回json。
- $this->validate($request, $rules, $message, $attributes);
- namespace Laravel\Lumen\Routing;
- trait ProvidesConvenienceMethods{
- ......
- public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
- {
- $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);
- if ($validator->fails()) {
- $this->throwValidationException($request, $validator);
- }
- }
- ......
- }
$this->throwValidationException($request, $validator);原来是这里直接返回json
- if ($validator->fails()) {
- /**
- * 修改验证返回
- */
- return $this->formatValidationErrors($validator);
- $this->throwValidationException($request, $validator);
- }
重新发送请求,果然生效了!!!可是... 看了一下路径vendor\laravel\lumen-framework\src\Routing\ProvidesConvenienceMethods.php,尴尬了,是扩展包的类。。。
控制器的底层类Controller.php也在这里,点进去look一look,
- <?php
- namespace Laravel\Lumen\Routing;
- class Controller
- {
- use ProvidesConvenienceMethods;
- /**
- * The middleware defined on the controller.
- *
- * @var array
- */
- protected $middleware = [];
- /**
- * Define a middleware on the controller.
- *
- * @param string $middleware
- * @param array $options
- * @return void
果然在这里引用ProvidesConvenienceMethods,而前面控制器的$this->validate应该也是调的这里,一切明了,在这里加一个和validate类似的方法不就OK了?
- public function validates(Request $request, array $rules, array $messages = [], array $customAttributes = [])
- {
- $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);
- if ($validator->fails()) {
echo 1;exit();- /**
- * 修改验证返回
- */
- return $this->formatValidationErrors($validator);
- //$this->throwValidationException($request, $validator);
- }
- }
调用$this->validates($request, $rules, $message, $attributes);//输出1
注释断点再测试,发现验证通过,返回结果集!
不过写在这里肯定不好,那就写在比较靠近应用层的Controller.php吧——app\Http\Controller/Controller.php
- <?php
- namespace App\Http\Controllers;
- use Laravel\Lumen\Routing\Controller as BaseController;
- use App\Providers\Validate\AppProvidersValidate;
- class Controller extends BaseController
- {
- //全局表单验证定制类
- use AppProvidersValidate;
- //
- }
- AppProvidersValidate.php放在哪,在什么命名空间下,你开心就好咯!我放在app\Providers\Validate\AppProvidersValidate.php具体代码如下,
- <?php
- namespace App\Providers\Validate;
- use Illuminate\Http\Request;
- trait AppProvidersValidate
- {
- public function validates(Request $request, array $rules, array $messages = [], array $customAttributes = [])
- {
- $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes);
- if ($validator->fails()) {
- /**
- * 修改验证返回
- */
- return $this->formatValidationErrors($validator);
- //$this->throwValidationException($request, $validator);
- }
- }
- }
以后一些针对表单验证的处理操作也可以放在这里啦!!!网上资料好少,纯手打,请不要转载,谢谢啦!!!详细分析(添加手机验证,中文验证与Validator验证的“半个”生命周期):http://www.cnblogs.com/cxscode/p/7561277.html
补充一下:
vendor\illuminate\validation\Factory.php是make()函数的实现位置,喜欢可以研究探讨下
- namespace Illuminate\Validation;
- class Factory implements FactoryContract
- {
- ......
- public function make(array $data, array $rules, array $messages = [], array $customAttributes = [])
- {
- // The presence verifier is responsible for checking the unique and exists data
- // for the validator. It is behind an interface so that multiple versions of
- // it may be written besides database. We'll inject it into the validator.
- $validator = $this->resolve(
- $data, $rules, $messages, $customAttributes
- );
- if (! is_null($this->verifier)) {
- $validator->setPresenceVerifier($this->verifier);
- }
- // Next we'll set the IoC container instance of the validator, which is used to
- // resolve out class based validator extensions. If it is not set then these
- // types of extensions will not be possible on these validation instances.
- if (! is_null($this->container)) {
- $validator->setContainer($this->container);
- }
- $this->addExtensions($validator);
- return $validator;
- }
- ......
- }
补充,如果找不到想要的验证:
https://www.cnblogs.com/tfcwolf/p/4350283.html
本文地址:http://www.cnblogs.com/cxscode/p/7485379.html
版权声明:本文为博主原创文章,未经博主允许不得转载。
lumen手记:自定义Validate表单验证的更多相关文章
- ASP.NET MVC Jquery Validate 表单验证的多种方式
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- 【干货】Laravel --Validate (表单验证) 使用实例
前言 : Laravel 提供了多种方法来验证应用输入数据.默认情况下,Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验 ...
- [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- Jquery Validate 表单验证的多种方式
ASP.NET MVC Jquery Validate 表单验证的多种方式 在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体 ...
- jQuery-easyui和validate表单验证实例
jQuery EasyUI 表单 - 表单验证插件validatebox 使用时需要向页面引入两个css文件如下: <link rel="stylesheet" href=& ...
- 看用Tornado如何自定义实现表单验证
我们知道,平时在登陆某个网站或软件时,网站对于你输入的内容是有要求的,并且会对你输入的错误内容有提示,对于Django这种大而全的web框架,是提供了form表单验证功能,但是对于Tornado而言, ...
- 基于jQuery的Validate表单验证
表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~ 而我工作中用到最多的就是基于基于jQuery的Validate表单验证~ 就向下面这样~ 因为今天有个朋 ...
- summernote富文本编辑器配合validate表单验证无法进行表单提交的问题
1.使用summernote富文本编辑器提交图片到服务器 在使用bootstrap中,我们用到了summernote富文本编辑器,使用summernote将图片上传到服务器中,参考我的上篇文章http ...
- thinkphp图片上传+validate表单验证+图片木马检测+缩略图生成
目录 1.案例 1.1图片上传 1.2进行图片木马检测 1.3缩略图生成 1.4控制器中调用缩略图生成方法 1.案例 前言:在thinkphp框架的Thinkphp/Library/Thin ...
随机推荐
- java拦截器与过滤器打印请求url与参数
HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletResponse httpServle ...
- Gradle Distributions
Gradle Distributions services.gradle.org/ distributions/ gradle-3.4-rc-3-all.zip 13-Feb-2017 14:55 + ...
- vim常用操作之复制剪切粘贴,注释取消注释,多行缩进等
进入vim按下v键,选择要操作的对象 按下y复制,d剪切,p粘贴 >缩进,<取消缩进 按下esc退出操作 按下ctrl+v,选择要操作对象, 按下大写I,写入注释符号,按下d取消注释 按下 ...
- JRebel 7.0.10 for intellij IDEA 2017.1
1什么是JRebel? JRebel是一套JavaEE开发工具.JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响.JReb ...
- 2017.8.23 postgresql的外键
1.增加/删除外键的语法 ALTER TABLE t_permission ADD CONSTRAINT fkey FOREIGN KEY (fd_resid) REFERENCES t_resour ...
- 2017.6.29 java读取.properties配置文件的几种方法
参考来自:http://www.cnblogs.com/s3189454231s/p/5626557.html 关于路径的解释:http://blog.csdn.net/bluishglc/artic ...
- python raise assert
class MyException(Exception): def __init__(self,error_msg): self.error_msg=error_msg def __str__(sel ...
- 【DB2】新建用户
1.创建用户(切换到root用户下操作) useradd -g users -d /home/qinys -s /bin/bash -m qinys 2.修改密码 passwd qinys 备注:此处 ...
- linux在shell中获取时间 date巧用
获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 date1=$(date --date='1 days ago +%Y%m%d') #前一天的日期 date1=$(d ...
- Linux的文件传输命令总结
由于工作原因,须要常常在不同的server见进行文件传输,特别是大文件的传输,因此对linux下不同server间传输数据命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp ...