Laravel学习记录--Laravel验证

Laravel自动验证

使用Illuminate\Http\Request 对象提供的 validate方法
如果验证通过,代码就可以正常的运行。如果验证失败,就会抛出异常,并自动将对应的错误响应返回给用户。


public function test(Request $req){
 $this->validate($rep,[
        '字段1'=>'规则1', //(多个规则用|分割)
        '字段2'=>'规则2'
        ],[
        //第三个参数可选 自定义错误提示信息
        '字段1.规则1'=>'错误提示信息1',
        '字段2.规则2'=>'错误提示信息2'

        ])
 }    

手动验证

如果你不想要使用请求上使用 validate 方法,你可以通过 validator Facade 手动创建一个验证器实例。用 Facade
上的 make 方法生成一个新的验证器实例:

make方法有三个参数
1.要验证的字段
2.验证规则
3.可选,错误提示信息

use  Validator
 $validator = Validator::make(request()->all(),[
   //这里键入验证规则

 ])
 if($validator->fails()){
 //如果错误信息存在
 //这里键入不满足验证规则的逻辑
   return back()->widthErrors($validator)->withInput();
   //没有通过验证,将错误信息闪存到session 前台可打印错误信息
 }

Laravel 表达请求验证

面对更复杂的验证情境中,你可以创建一个「表单请求」来处理更为复杂的逻辑。表单请求是包含验证逻辑的自定义请求类

新建一个post请求类 app\Http\Request
php artisan make:request RequestName

     
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class YzPost extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
        //这里可键入权限判断逻辑
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
        'password'=>'confirmed'
            
        ];
    }
    //重写验证提示信息
    public function messages(){
        return [
         'password.confirmed'=>'两次密码不一致'
        ];

    }
}

如何使用验证规则
新建的YzPost请求继承Request,所以完全可以将其看作Request,我们只是在其基础上加了一些验证规则而已

   use App\Http\Request\YzPost
   public function store (YzPost $request){
   //...发送post请求自动验证
   }  

Laravel 自定义验证规则

1.生成规则对象 app\Rules
php artisan make:rule RuleNAME


namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Yzm implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        //接受属性值和名称,并根据属性是否符合规则而返回true/false
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return '验证码错误';
        //返回验证错误时的错误信息
    }
}

控制器使用

 use app\rules\rle
  $request->validate(
  [
  '字段名'=>['required', news 规则类]
  ])

显示错误信息
$errors
has():判断某个字段是否有错误信息
first():查找特定字段第一个错误信息
get():查找指定字段所有错误信息
all():查找所有字段错误信息

//显示错误信息实例
@if($errors->has('title'))//如果title字段有错误信息
{{$errors->first('title')}}
@endif

Laravel自带验证规则

accepted :验证字段必须为 yes ,on,1,true:常用在是否同意服务条款
active+_url = dns_get_record
after:data 字段必须为给定日期后面的值
before:data 字段必须为给定日期之前的值
after_or_equal:date 验证字段必须等于或给定日期之后的值
before_or_equal:date
date_equals:data 验证的字段必须等于给定日期
alpha:字段必须是字母
alpha_dash:字段可能具有字母。数字,破折号,下划线
alpha_num"字段必须为字母加数字
array:字段必须是一个php数组
between:min,max:验证字段必须在min-max之间
boolean:验证的字段必须能够转换为布尔型
confirmed : 验证两个字段值是否一致
如果要验证的字段是 password,
则password字段必须匹配 password_confirmation 字段。
different:field:验证的字段必须与字段field不同
date:字段必须为有效的日期
date_format:format 验证的字段必须与日期格式匹配 date和date_formate只能使用其中一个
digits:value 验证的字段必须是数字,并且必须具有
digits_between:min,max :验证字段必须为数字,且在min-max之间
dimensions :验证的文件必须为图片并且图片符合相应规则
规则如下 min_width、 max_width 、 min_height 、 max_height 、 width 、 height 、 ratio。(比率宽/高)
也可使用Rule::dimensions()->maxwidth()->maxheight()
distinct 验证数组时。指定的字段不能有重复值
email:字段必须符合email规则
exists : ???
file:验证的字段是否成功上传文件
filled:验证的字段在存在时不能为空
image 验证的文件必须为图片(jpeg,png,bmp,gif,svg)
in:foo,bar…:验证的字段必须包含在给定的值列表中
unique:table,column 验证的字段必须在给定的表给定的字段唯一,如果不指定column则默认当前字段
regex:验证的字段必须与给定的正则匹配
in:n1,n2,n3 判断 字段输入值是否在in指定的列表
notin:验证的字段不能在给定列表中
in_array:anotherfield 验证的字段必须存在于另一个字段(anotherfield)的值中。
integer验证的字段必须是整数。
ip验证的字段必须是 IP 地址。
ipv4验证的字段必须是 IPv4 地址。
ipv6验证的字段必须是 IPv6 地址。
json 验证的字段必须是有效的 JSON 字符串。
numeric:验证的字段必须是数字
present:验证的字段必须存在与输入数据中但可以为空
regex:pattern 验证的字段满足正则匹配
required 字段不能为空
max:value 验证中的字段必须小于或等于value。
min:value 验证中的字段必须大于等于value
required_if:anotherfield,value,…
如果指定的其它字段( anotherfield )等于任何一个 value 时,被验证的字段必须存在且不为空。
required_unless:anotherfield,value,…
如果指定的其它字段( anotherfield )等于任何一个 value 时,被验证的字段不必存在。

required_with:foo,bar,…
只要在指定的其他字段中有任意一个字段存在时,被验证的字段就必须存在并且不能为空。
required_without:foo,bar,…

只要在其他指定的字段中有任意一个字段不存在,被验证的字段就必须存在且不为空

required_without_all:foo,bar,…

只有当所有的其他指定的字段都不存在时,被验证的字段才必须存在且不为空
size:value

验证的字段必须具有与给定值匹配的大小。对于字符串来说,value 对应于字符数。对于数字来说,value ???好像有问题对应于给定的整数值。对于数组来说, size 对应的是数组的 count 值。对文件来说,size 对应的是文件大小(单位 kb )。

string :验证的字段必须是字符串

timezone:验证的字段必须是有效的时区标识符,会根据 PHP 函数 timezone_identifiers_list 来判断。

unique:table,column,except,idColumn

验证的字段在给定的数据库表中必须是唯一的。如果没有指定 column,将会使用字段本身的名称。

忽略字段的Unique 指定ID
使用Rule类定义规则来忽略用户的ID,
use Illuminate\Validation\Rule;

Validator::make( d a t a , [ e m a i l = > [ r e q u i r e d , R u l e : : u n i q u e ( u s e r s ) > i g n o r e ( data, [ 'email' => [ 'required', Rule::unique('users')->ignore( user->id,‘主键id’),
//email字段忽略重复性,如果是当前用户的email
],
]);
如:id为2的用户忽略email字段的重复性

‘email’=> Rule::unique(‘users’)->ignore(2,‘uid’)
url:验证的字段必须是有效的url加粗样式

发布了17 篇原创文章 · 获赞 0 · 访问量 455

猜你喜欢

转载自blog.csdn.net/weixin_45143481/article/details/103974278