TP中使用laravel那一套验证
---恢复内容开始---
1,tp5项目下新建一个extends目录,同时在入口文件index.php配置
define('EXTEND_PATH', '../extend/'); 结果:
2,加载laravel里面涉及的illuminate包,更改composer。json文件 以后(如下),composer update
{
"name": "topthink/think",
"description": "the new thinkphp framework",
"type": "project",
"keywords": [
"framework",
"thinkphp",
"ORM"
],
"homepage": "http://thinkphp.cn/",
"license": "Apache-2.0",
"authors": [
{
"name": "liu21st",
"email": "liu21st@gmail.com"
}
],
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
},
"require": {
"php": ">=5.4.0",
"topthink/framework": "^5.0",
"topthink/think-image": "^1.0",
"topthink/think-captcha": "^1.0",
"topthink/think-mongo": "^1.0",
"topthink/think-migration": "^1.0",
"topthink/think-angular": "^1.0",
"topthink/think-sae": "^1.0",
"topthink/think-worker": "^1.0",
"topthink/think-queue": "^1.0",
"topthink/think-testing": "^1.0",
"illuminate/validation": "^5.5",
"illuminate/translation": "5.5.*",
"illuminate/database": "^5.5",
"douyasi/identity-card": "~2.0"
},
"extra": {
"think-path": "thinkphp"
},
"config": {
"preferred-install": "dist"
}
}
3,在extend文件夹下面新建一个Validator.php
<?php
namespace validator;
//use exception\ValidatorException;
use Illuminate\Database\Capsule\Manager;
use Illuminate\Validation;
use Illuminate\Filesystem;
use Illuminate\Translation;
use Illuminate\Validation\DatabasePresenceVerifier;
use think\Exception;
use DB;
use Douyasi\IdentityCard\ID; class Validator
{
static $factory = null; /**
* @param $data
* @param $rules
* @return array
* @throws ValidatorException
*/
public static function make($data, $rules)
{
$is_default = [];
foreach($rules as $key=>$x)
{
$rules[$key] = preg_replace('/\|default\:[^\|]+/', '', $x, 1, $match);
if($match)
{
preg_match('/\|default:([^\|]+)/', $x, $m);
if(isset($m[1]))
{
$is_default[$key] = $m[1];
}
else
{
$is_default[$key] = null;
}
}
else
{
$is_default[$key] = null;
}
}
// var_dump($is_default);die;
if(self::$factory === null)
{
$filesystem = new Filesystem\Filesystem();
$fileLoader = new Translation\FileLoader($filesystem, THINK_PATH.'/../application/extra/');
$translator = new Translation\Translator($fileLoader, '/');
$factory = new Validation\Factory($translator); $database = [
'driver' => 'mysql',
'host' => env('DB_HOST', '192.168.40.8'),
'database' => env('DB_NAME', 'huolicai'),
'username' => env('DB_USER', 'root'),
'password' => env('DB_PASS', 'Abc@123456'),
'port' => env('DB_PORT', '3306'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
$connection = new Manager();
$connection->addConnection($database);
$connection->bootEloquent();
$connection->setAsGlobal();
$factory->setPresenceVerifier(new DatabasePresenceVerifier($connection->getDatabaseManager())); $factory->extend('list', function ($attribute, $value, $parameters, $validator) {
if(!is_array($value)) $value = explode(',', $value);
foreach($value as $item){
if($parameters[0] == 'integer' && !is_numeric($item))
throw new ValidatorException($attribute . ' 的每项必须为'.$parameters[0].'的类型', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('csrf', function ($attribute, $value, $parameters, $validator) {
return $value == md5('SECRET.XXX'.\think\Request::instance()->ip());
}); $factory->extend('cellphone', function ($attribute, $value, $parameters, $validator) {
return preg_match('/^1(3|4|5|7|8|9)\d{9}$/', $value);
}); $factory->extend('idcard', function ($attribute, $value, $parameters, $validator) {
$ID = new ID();
return $ID->validateIDCard($value);
}); $factory->extend('length', function ($attribute, $value, $parameters, $validator) {
return strlen($value) == ($parameters[0]??0);
}); $factory->extend('length_between', function ($attribute, $value, $parameters, $validator) {
return (strlen($value) > $parameters[0]??0 )&&(strlen($value) < $parameters[1] ?? 0);
}); $factory->extend('bankcard', function ($attribute, $value, $parameters, $validator) {
try{
$card = \Bank::card($value);
}catch(\Exception $e){
# echo 'error_1';exit();
throw new ValidatorException('获取银行卡信息失败,请检查并重试', ValidatorException::BAD_VALIDATOR_PARAMS);
} if(!isset($card['validated']))
# echo 'error_2';exit();
throw new ValidatorException('获取银行卡信息失败,请检查并重试', ValidatorException::BAD_VALIDATOR_PARAMS);
/*
if(!$card['validated'])
throw new ValidatorException('银行卡无效', ValidatorException::BAD_VALIDATOR_PARAMS);
*/
if($card['cardType'] == 'CC')
throw new ValidatorException('不支持信用卡', ValidatorException::BAD_VALIDATOR_PARAMS); if(!isset(config('bank')[$card['bank']]))
throw new ValidatorException('不支持'.($card['bankName'] ?? $card['bank'] ?? '这张').'银行卡', ValidatorException::BAD_VALIDATOR_PARAMS); return true;
}); $factory->extend('float_digits', function ($attribute, $value, $parameters, $validator) {
$value = (float) $value;
$string = (string) $value;
$divided = explode('.', $string);
if(!count($parameters) == 2)
throw new ValidatorException(null, ValidatorException::BAD_VALIDATOR_PARAMS); if(!isset($divided[1]) && $parameters[0] == 0)
return true; if(isset($divided[1]) && strlen($divided[1]) <= $parameters[1] && strlen($divided[1]) >= $parameters[0])
return true; return false;
}); $factory->extend('exists_in', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false) ){
if(count($parameters) < 2) $parameters[1] = 'id'; $column = $parameters[1];
$exists = \think\Db::table($parameters[0])->where([$column => $value]);
if(isset($parameters[2]))
{
parse_str($parameters[2], $xx);
if($xx)
{
$exists = $exists->where($xx);
}
}
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = $exists->find();
if(!$exists)
throw new ValidatorException($attribute_name.' 不存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('unique_in', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false) ){
if(count($parameters) < 2) $parameters[1] = 'id'; $column = $parameters[1];
$exists = \think\Db::table($parameters[0])->where([$column => $value]);
if(isset($parameters[2]))
{
parse_str($parameters[2], $xx);
if($xx)
{
$exists = $exists->where($xx);
}
}
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = $exists->find();
if($exists)
throw new ValidatorException($attribute_name.' 已存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('exists_if', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false && !trim($value)) ){
if(count($parameters) < 3) $parameters[2] = 'id'; $column = $parameters[2];
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = \think\Db::table($parameters[1])->where([$column => $value])->find();
if(!$exists)
throw new ValidatorException($attribute_name.' 不存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('default', function ($attribute, $value, $parameters, $validator) {
return true;
}); $factory->extend('unique_if', function ($attribute, $value, $parameters, $validator) {
if(($parameters[0] == true && trim($value)) || ($parameters[0] == false && !trim($value)) ){
if(count($parameters) < 3) $parameters[2] = 'id'; $column = $parameters[2];
$attribute_name = config('validation.attributes')[$attribute] ?? $attribute; $exists = \think\Db::table($parameters[1])->where([$column => $value])->find();
if($exists)
throw new ValidatorException($attribute_name.' 已存在', ValidatorException::BAD_VALIDATOR_PARAMS);
}
return true;
}); $factory->extend('null_if', function ($attribute, $value, $parameters, \Illuminate\Validation\Validator $validator) {
$cond = $validator->getData()[$parameters[0]];
$match = false;
for($i = 1; $i < count($parameters); $i++)
{
if($cond == $parameters[$i]){
$match = true;
break;
}
}
if($match)
{
if(!empty($value) && $value !== 0 && $value !== '0') return false;
}
return true;
}); self::$factory = $factory;
}else{
$factory = self::$factory;
} $messages = config('validation.custom');
$validator = $factory->make($data, $rules, $messages);
if($validator->fails())
{
throw new Exception(implode(',', $validator->errors()->all()), Exception::BAD_PARAMS);
} $return = [];
foreach($rules as $key=>$x)
{
$value = $data[$key] ?? $is_default[$key] ?? '';
if(($value === NULL || $value === "") && $is_default[$key] !== NULL)
{
$value = $is_default[$key];
}
if(null === $value || '' === $value)
{
}
if(preg_match('/list\:/', $rules[$key]))
{
if(is_null($value)) $value = '';
$value = explode(',', $value);
}
$return[] = $value;
} return $return;
}
}
5,在controller里面写一个方法
<?php
namespace app\index\controller; use validator\Validator; class Index
{
public function test1()
{
$handler = new Validator();
$a = $handler->make(['user'=>142, 'phone'=>1,'name'=>'kevin'],[
'user'=>'required|max:2',
'phone'=>'required',
'name'=>'required',
// 'id'=>'required|idcard'
],[
'phone.required' => 'phone不能为空',
'name.required' => '姓名不能为空'
]); echo "验证通过";
6,结果
7,如何新增验证方法 : 大(比如增加一个idcard验证身份证的方法)
第一步:在validator.php修改
代码如下:
$factory->extend('idcard', function ($attribute, $value, $parameters, $validator) {
$ID = new ID();
return $ID->validateIDCard($value);
});
注意:为了能验证身份证,这里利用了第三方的包
结果演示:
TP中使用laravel那一套验证的更多相关文章
- Laravel 中自定义 手机号和身份证号验证
首先在 Providers\AppServiceProvider.php 文件中自定义 手机号和身份证号验证 // AppServiceProvider.php 文件 <?php namespa ...
- 【干货】Laravel --Validate (表单验证) 使用实例
前言 : Laravel 提供了多种方法来验证应用输入数据.默认情况下,Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验 ...
- 仿联想商城laravel实战---4、验证(lavarel的表单验证如何使用)
仿联想商城laravel实战---4.验证(lavarel的表单验证如何使用) 一.总结 一句话总结: 验证规则和验证信息的数组:在控制器的方法中 1.注册页面中的用户名正确(比如是否重名,字段长度是 ...
- laravel的Validation检索验证错误消息
基本用法 处理错误消息 错误消息和视图 可用的验证规则 有条件地添加规则 自定义错误消息 自定义验证规则 基本用法 Laravel提供了一个简单.方便的工具,用于验证数据并通过validation类检 ...
- 再说表单验证,在Web Api中使用ModelState进行接口参数验证
写在前面 上篇文章中说到了表单验证的问题,然后尝试了一下用扩展方法实现链式编程,评论区大家讨论的非常激烈也推荐了一些很强大的验证插件.其中一位园友提到了说可以使用MVC的ModelState,因为之前 ...
- tp中使用分页技术
1 public function showList() { $m_ld = D ( 'guangxi_ld' ); $page = I ( 'get.p', 1 ); // 在配置中获取分页值 $p ...
- 在 Java 代码中对 Kerberos 主体进行身份验证
转载请注明出处:http://www.cnblogs.com/xiaodf/ 本文举例说明如何使用 org.apache.hadoop.security.UserGroupInformation 类在 ...
- SpringMVC中使用Jcaptcha实现校验码验证
SpringMVC中使用Jcaptcha实现校验码验证:http://www.tuicool.com/articles/rMzAFj 本文将使用Jcaptcha实现校验码验证,并演示在Spring/S ...
- asp.net中常用的几种身份验证方式
转载:http://www.cnblogs.com/dinglang/archive/2012/06/03/2532664.html 前言 在B/S系统开发中,经常需要使用"身份验证&q ...
随机推荐
- (线段树) I Hate It --hdu--1754 (入门)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1754 这次的代码和上个代码很相似,只不过上次的节点里存的是sum值,这次节点里存放的是Max, 正在慢慢 ...
- hdu 5039 线段树+dfs序
http://acm.hdu.edu.cn/showproblem.php?pid=5039 给定一棵树,边权为0/1.m个操作支持翻转一条边的权值或者询问树上有多少条路径的边权和为奇数. 用树形df ...
- 通过oracle闪回查看表中值的变更履历信息
http://www.oracle.com/technetwork/cn/articles/week1-10gdba-093837-zhs.html 得到电影而不是图片:闪回版本查询 不需要设置,立即 ...
- delphi 动态加载dll
引入文件 DLL比较复杂时,可以为它的声明专门创建一个引入单元,这会使该DLL变得更加容易维护和查看.引入单元的格式如下: unit MyDllImport; {Import unit for MyD ...
- 读《深入理解Windows Phone 8.1 UI控件编程》1.4.3 框架的应用示例:自定义弹出窗口有感
前些天买了园子里林政老师的两本 WP8.1 的书籍.毕竟想要学得深入的话,还是得弄本书跟着前辈走的. 今天读到 1.4.3 节——框架的应用示例:自定义弹出窗口这一小节.总的来说,就是弄一个像 Mes ...
- Python学习(一)——数据类型
在大学学过一点python,只学了语法,关于实际应用却没怎么用过.现在用一些python的脚本来模拟webservices,挺好用的.这个语言,还是要好好学习学习了. 目前看着教材来的,这本教材,好像 ...
- Dalsa线扫相机SDK下载和安装
1.首先去官方网站下载SDK Support Downloads - Teledyne DALSA http://www.teledynedalsa.com/imaging/support/downl ...
- easyui-layout系列之布局(1)
1.Layout布局 通过 $.fn.layout.defaults 重写默认的 defaults. 布局(layout)是有五个区域(北区 north.南区 south.东区 east.西区 wes ...
- 记录FormsAuthentication的使用方法
配置,配置mode="Forms",其他属性详见 MSDN(点我直接查看各authentication属性) . <configuration> <system. ...
- rabbitMQ的简单实例——amqp协议带数据回写机制
rabbitMQ是一种高性能的消息队列,支持或者说它实现了AMQP协议(advanced message queue protocol高级消息队列协议). 下面简单讲一讲一个小例子.我们首先要部署好r ...