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 ...
随机推荐
- ubuntu10.10编译TQ2440的x86-qtopia-2.2.0具体问题总结及原因分析
转: http://blog.csdn.net/zyxlinux888/article/details/6705481 http://www.cnblogs.com/liu_xf/archive/20 ...
- [置顶]
kubernetes创建资源yaml文件例子--rc
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: ReplicationController #指定创建资源的角色/类型 metadata: ...
- django模板解析 循环列表中 切片和求长度
{% for subrow in subdic.content|slice:":5" %} {% endfor %} {% if "{{subdic.content|le ...
- 微博(MicroBlog)
ylbtech_Miscellaneos Inner 新浪微博 www.weibo.com 搜狐微博 http://t.sohu.com 网易微博 http://t.163.com/session ...
- oracle调优 浅析“会话管理开销”
调优之浅析"会话管理开销" [简单介绍] 在调优的过程中,对于会话的管理是比較普遍的问题,由于维护会话的开销相对是比較高的. [过程表现例如以下] ...
- IntelliJ IDEA和pycharm注册码
BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- 如果你还有以下这些现象,那你仍是PHP菜鸟:
最近看了个文章,写的很精辟,跟大家分享一下,这也是我的目标: 如果你还有以下这些现象,那你仍是PHP菜鸟:1. 不会利用如phpDoc这样的工具来恰当地注释你的代码:2. 对优秀的集成开发环境如Zen ...
- centos 7 查看系统/硬件信息及运维常用命令+联想Y430P无线网卡驱动安装
centos 7 查看系统/硬件信息及运维常用命令 当前环境:联想Y430P CentOS 7.3 [root@yan-001 ~] # uname -a # 查看内核/操作系统/CPU信息的Li ...
- Transform.Translate 平移
function Translate (translation : Vector3, relativeTo : Space = Space.Self) : void Description描述 Mov ...
- 常用的二种修改mysql最大连接数的方法
方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MY ...