美文网首页
HTTP --- 验证

HTTP --- 验证

作者: 爱折腾的傻小子 | 来源:发表于2018-10-29 10:59 被阅读29次
  • 在控制器中 验证 请求数据
# 在控制器中 验证 request 请求数据
$this->validate($request,[rules,$messages=[],$authorize=[]]);
# $requset :请求实例对象
# rules :验证规则
# $messages :自定义错误消息
# $customAttributes:得到验证错误的自定义属性(如果不知道,使用默认值吧)
# 第四个参数:参考下面的attributes()方法;(使用方法一致)
# 讨论一下validate方法中的几个参数的用法
//> $request :该参数Request类的实例对象,主要是包含请求的HTTP的所有信息
//> rules :验证规则(这里不多解释,参看手册用法即可)
//> $messages :自定义错误信息(这里注意:大多数情况下,我们都需要自定义错误信息)(如果不需要自定义错误信息省略该参数)
# 规则如下(该方法应该返回 属性/规则对 数组 以及对应的错误消息)
[
    'name.required' => ':attribute字段必须填写',
    'mobile.required' => ':auttrbute字段必须填写',
]
  • 表单请求验证
# 定义请求类
php artisan make:request Blog
# 该命令会在 app/Http/Requests目录下 创建一个 Blog 类
# 我们看一下在Blog类中可以使用的几个方法
# 1. 首先我们来看看 rules() 方法(就如同validate()方法中的$rules参数)
public function rules()
{
    //> 返回一个数组
    return [
            'name' => 'bail|required',
            'mobile' => 'required'
    ];
}
# 2. 我们看看自定义错误消息 方法 messages() (该方法如同validate()中的$message参数)
public function messages()
{
    //> 该方法 也只需要返回一个 数组
    return [
            'name.required' => ':attribute字段必须填写',
            'mobile.required' => '请输入手机号码'
    ];
}
# 3.  错误消息属性(替换属性对应的消息替换)
# 该方法 和 messages() 方法结合使用(如果省略默认替换为属性名称)
public function attributes()
{
     return [
        'name' => '名称'    //> 替换:attribute => name => 名称
    ];
}
# blog类提供的 认证表单请求(用于检测当前请求是否有资格)
public function authorize()
{
    //> 获取路由参数(假设路由定义为 'photos/{users}/create')
    //> 这里获取的都是 users 传递的参数(如果有必要可以进行ROM验证查询)
    $users = $this->route('users')
    //> return bool 需要返回一个 布尔值
    //> true:认证通过 继续 验证请求数据
}
# 如果返回 false Laravel 默认返回一个403响应(如果存在视图403.blade.php就渲染)
# 返回给定的错误数据(建议使用默认值)
# 验证失败时,一次性存入session中的数据格式(默认数组形式)
# 重定向 redirect()->to()->withErrors()存入的数据
protected function formatErrors(Validator $validator)
{
    return $validator->getMessageBag()->toArray();
}
# 我们来看一下Blog类的父类FormRequest.php 提供的几个属性
protected $dontFlash = ['password', 'password_confirmation'];
# 该属性指定验证失败返回上次请求时携带的session数据排除数组中的
# 如何使用Blog请求验证类
# 在指定控制器动作参数 注入 Blog类即可 比如:
public function store(PhotoBlog $request)
{
    //> 控制器中 这里不需要任何代码(自动验证Blog类)
}
  • 其他(Ajax请求验证)
# 如果请求是 Ajax 时:框架会响应422状态码给用户,并在响应数据中宝航JSON格式的验证错误信息
  • 手动验证器(就是在控制器中使用Validaor门面验证请求数据)
# 这种形式 是 我们不想使用 控制器中的$this-validate()方法时
Validator::make(request()->all(),$rules,$messages,$attrible);
# 使用参数参考上面(唯一方便的就是,我们可以自定义跳转位置)(参考手册)
if ($validator->fails()) {
        return redirect('post/create')      //> 跳转位置
                ->withErrors($validator)    //> 错误信息
                ->withInput();                    //> 表单请求数据
}
//> ----------- 使用ValidatesRequest trait提供的自动重定向(添加validate()方法)
Validator::make(request()->all(),$rules,$messages,$attrible)->validate();
  • 错误包(处理我们在一个页面有多个表单时,区分不同的错误信息)
# 在重定向的withErrors中传递
return redirect('register')
    ->withErrors($validator, 'login');  //> 登录错误包 login
# 视图中使用方式
{{ $errors->login->first('email') }}  //> 这种形式
# 在Blog请求验证类中:我们该如何处理呢?
# FormRequest 请求验证父类 存在这样一个属性
protected $errorBag = 'default';  //> 该属性 指定当前 错误包名称
  • 处理错误信息(在视图中使用较多)
# 我们来看看 MessageBag.php 定义的接口中的抽象方法(实现)
# keys() 获取当前错误信息中的所有键值(Array)
{{ $errors->default->keys() }}
# add(string $key,string $message):向错误信息中添加错误信息
$errors->add('sex','新添加');
# merage(MessageProvider|Array $message):合并错误信息
# has(string|Array $keys):判断给定属性是佛存在
# first(string $key=null,string $format=null):获取第一个错误信息(当然也可以指定属性和格式)
$errors->first();
# get(string $key,string $format=null):获取给定属性信息,指定格式
{{ $errors->get('mobile','<li>:message</li>') }}
# all(string $format=null):获取当前错误信息包的所有信息(指定错误格式)
{{ $errors->all() }}
{{ $errors->all('<li>:message</li>') }}
# getFormat():返回当前格式(如上面的:message或<li>:message</li>)
# setFormat(string $format=':message'):设置格式
# isEmpty():判断message bag是否为空
# count():判断message错误信息个数
# toArray() 得到一个数组
# 看一下错误rules替换
$messages = [
    'same'    => 'The :attribute and :other must match.',
    'size'    => 'The :attribute must be exactly :size.',
    'between' => 'The :attribute must be between :min - :max.',
    'in'      => 'The :attribute must be one of the following types: :values',
];
# :size :attribute 与验证有关
  • 验证大全
# 错误信息rules匹配规则(每个规则对应一个错误信息)
# 如下面
[
  'name.requeired' => ':attribute字段必须填写',
  'name.date' => ':attribute字段需要日期类型',
  'mobile.after' => ':attribute字段必须是:date后面日期'
]
accepted 
    # 验证值必须是 yes、on、1、true(在"同意服务协议"时有用)
active_url 
    # 验证当前ip或host(域名DNS是否合规(参考checkdnsrr函数))
url 
    # 验证字段必须是基于PHP函数 filter_var 过滤的有效的url
ip
    # 验证字段必须是IP地址
JSON
    # 验证字段必须是有效的JSON字符串
email
    # 验证字段必须是格式化的电子邮箱地址
//> after:date :判断当前字段必须是date日期后的某个值(单独使用时)
'start_time' => 'bail|required|date|after:2016-12-12' 
    # start_time 输入值必须是2016-12-12后的某个值
# 配合其他字段使用时(比如:在查询某个自定的日期范围时)(after:date通常配合date使用)
'start_time' => 'bail|required|date', 
    //> 日期格式
'end_time' => 'bail|required|date|after:start_time',  
    //> 当前end_time值必须在start_time值后面
//> before:date :则是跟after:date相反的寓意
alpha :该字段必须是字母(字母一般值得事英文、日文等字母)
alpha_num :该字段必须是字母或数组
alpha_dash :字母、数组、(-)破折号、(_)下划线
array 
    # 该字段必须是php数组
distinct
    # 验证字段不能包含重复值(处理数组时)
    # 如:'foo.*.id' => 'distinct'
between:min,max 
    # 验证给定值在最小值和最大值之间(包括字符串、数组等)
digits_between:min,max
    # 验证字段数值长度必须介于最小值和最大值之间
digits:value
    # 验证字段必须是数字且【长度】为value指定的值
integer
    # 验证字段必须是【整形】
numeric
    # 验证字段必须是【数值】
boolean 
    # 验证字段能否被转换为布尔类型
regex:pattern
    # 验证字段必须匹配给定正则表达式
    # 注意:使用正则时,|符号放在[]中使用(以免和分割符号|冲突)
present
    # 验证字段必须出现在输入数据值中(可以为空)
filled
    # 验证当前字段如果存在则不能为空
  • required (必须)
required //> :输入字段不能为空
    # 1. 值为 null
    # 2. 值是空字符串
    # 3. 值是空数组或空的Coutable对象
    # 4. 值是上传文件但路径为空
required_if:anotherFiled,value,...
    # 验证当前字段在 anotherFiled字段等于value值时(当前字段是必须填写的)
required_unless:anotherfield,value,...
    # 验证当前字段(除了anotherfield字段等于value时)当前字段必须填写
required_with:foo,bar,...
    # 验证当前字段(只有在foo,bar,...其中任一字段存在时,该字段必须填写)
required_with_all:foo,bar,...
    # 验证当前字段(只有在foo,bar,...上面字段都存在时,该字段必须填写)
required_without:foo,bar,...
    # 验证当前字段(只有在foo,bar,...其中任一字段不存在时,该字段必须填写)
required_without_all:foo,bar,...
    # 验证当前字段(只有在foo,bar,...所有字段都不存在时,该字段必须填写)
same:field
    # 当前字段值 必须和 field字段值匹配
different:field
    # 验证当前字段必须是和filed字段不同的值
size:value
    # 当前字段值 必须和value值匹配尺寸
    # 字符串:匹配的是字符串的数目
    # 文件:匹配的是相应文件字节数
string
    # 验证字段必须是字符串
timezone
    # 验证字符必须是基于PHP函数timezone_identifiers_list的有效时区标识
confirmed
    # 验证字段必须有一个匹配字段foo_confirmed
    # 比如:我们验证password,必须存在字段password_confirmed字段(在注册时有用)
date
    # 验证字段必须是一个基于PHPstrtotime函数的有效日期
date_format:format
    # 验证字段必须和指定格式一致(format:如 y/m/d等)(参看date_parse_from_format函数)
in:foo,bar,...
    # 验证字段值必须在给定的列表中(如:foo,bar,...)
in_array:另一个字段
    # 验证字段必须在另一个字段中存在(????)
exists:table,column
    # 验证字段必须存在指定数据表中
  • 上传文件 验证
dimensions
    # 验证图片尺寸必须满足规定参数
file
    # 验证字段必须是上传成功的文件
image
    # 验证文件必须是图片(jpeg、png、bmp、gif、svg)
    'state' => 'exists:states',  # 验证当前值state存在表states字段中
  • 添加条件规则
sometimes
    # 只有某个字段存在情况下才进行检查
    'email' => 'sometimes|required|eamil' # email字段存在时,才会验证这里
    # sometimes 验证其他 

相关文章

  • HTTP --- 验证

    在控制器中 验证 请求数据 表单请求验证 其他(Ajax请求验证) 手动验证器(就是在控制器中使用Validaor...

  • HTTP Basic验证

    什么是HTTP Basic 在你访问一个需要HTTP Basic Authentication的URL的时候,如果...

  • HTTP授权验证

    HTTP认证框架 服务器端返回401状态码,告诉客户端需要验证信息。WWW-Authenticate:

  • webstrom2018 注册码

    经验证可以使用,验证时间2019年4月 http地址破解:http://hb5.s.osidea.cc:1017 ...

  • Laravel Http层--验证

    1、简介 Laravel 提供了多种方法来验证应用输入数据。默认情况下,Laravel 的控制器基类使用Valid...

  • 浅谈Http API验证

    0x01 首先我们得知道,目前web应用主要面临的安全问题: 1.数据篡改 2.数据窃取 3.重放攻击 4.非法参...

  • (转载)HTTP AUTH验证

    何为http auth? http auth是一种基础的用户验证,原理是将用户名:密码base64加密后放在htt...

  • Nginx反向代理proxy_pass路径的唯一拼接规则

    多种情况验证 假设请求:http://localhost/api/login[http://localhost/a...

  • 防御CSRF攻击

    防御CSRF攻击主要有三种策略:验证HTTP Referer字段,在请求地址中添加token并验证,在HTTP头中...

  • web认证机制

    本文为web开发系列的一部分。 HTTP Basic Auth HTTP协议内置的简单身份验证机制,每次都需要验证...

网友评论

      本文标题:HTTP --- 验证

      本文链接:https://www.haomeiwen.com/subject/zhiatxtx.html