资讯专栏INFORMATION COLUMN

Laravel的表单验证

wapeyang / 2743人阅读

摘要:验证的字段值必须与参数字段的值不同。第一次验证失败后停止运行验证规则。只是停止这个字段的验证,其它字段不影响。两次输入的密码不一致新密码与旧密码不能一致检查经过身份验证的用户确定其是否具有更新给定资源的权限。

修改密码

Confirmed

如果要验证的字段是 password,输入中必须存在匹配的 password_confirmation 字段。

Different

验证的字段值必须与参数字段的值不同。

public function rules() {

    return [
        //...
        "password" => "bail|required|string|between:8,20|confirmed|different:old_password",
        "password_confirmation" => "bail|required|string|between:8,20"
        //...
    ];

}
验证数组

通常我们的 tags 前端通常会写成这个样子:

然后在后端可以通过多对多的关联来实现这个添加标签的功能,但是其实我们仔细地想:我们添加标签的时候希望达到什么样的效果呢?我觉得有下面两个最简单的:

这个标签的 tags[] 是不能为空的。

一旦 tags[] 不为空,里面的每一个元素(标签)应该是唯一的。

所以在验证的时候,我们可以这样:

Validator::make($request->all(), [    
  "tags" => "required|array",    
  "tags.*" => "required|string|distinct|min:3",
]);

这里需要解释一下,第一条

"tags" => "required|array", 

是表明这是一个不能为空的数组,然后第二条

"tags.*" => "required|string|distinct|min:3", 

就是说:tags 数组里面每个元素我希望是 string ,而且是唯一的 (distinct),每个元素最小的长度为 3。

Bail

第一次验证失败后停止运行验证规则。
只是停止这个字段的验证,其它字段不影响。

messages()和attributes()

messages()attributes() 继承于IlluminateFoundationHttpFormRequest,可以重写验证字段的含义和提示信息。

public function messages() {
    return [
        "password.confirmed" => "两次输入的密码不一致!",
        "password.different" => "新密码与旧密码不能一致!"
    ];
}
authorize()

检查经过身份验证的用户确定其是否具有更新给定资源的权限。
如果 authorize() 方法返回 false,则会自动返回一个包含 403 状态码的 HTTP 响应,也不会运行控制器的方法。

public function authorize() {
    return true;
}
Unique

第一种写法:unique:(连接名)表名,表中对应字段,忽略值,表主键

当字段名和表中字段相等时可省略

忽略值一般用于修改判断时去掉自己

表主键为id时可省略

public function rules() {
    return [
        "name" => "required|string|unique:mysql.sometable,name",
        //...
    ];
}

第二种写法:使用IlluminateValidationRule中的unique()静态方法

public function rules() {
    $id = $this->get("id");

    return [
        "id" => "required|integer",
        "name" => [
            "required",
            "string",
            Rule::unique("mysql.sometable")->ignore($id, "id")
        ],
        //...
    ];
}

还有其他查询条件时,可以链式使用where()等方法

public function rules() {
    $stationId = $this->get("station_id");

    return [
        //...
        "car_number" => [
            "required",
            "string",
            Rule::unique("queue")->where(function ($query) use ($stationId) {
                $query->where([
                    ["station_id", $stationId],
                    ["cancel_state", 0]//未取消
                ])->whereDate("create_time", today()->toDateString());
            })//排队中不允许重复
        ],
        //...
    ];
}
Required

有许多规则,视实际情况使用:

required_if

required_unless

required_with

required_with_all

required_without

required_without_all

举个例子

public function rules() {
    return [
        "tel" => "required_without_all:mobile,email,address",
        "mobile" => "required_without_all:tel,email,address",
        "email" => "required_without_all:tel,mobile",
        "address" => "required_without_all:tel,mobile",
    ];
}

public function messages() {
    return [
        "tel.required_without_all" => "当手机号码、Email、地址都为空时,电话号码不能为空",
        "mobile.required_without_all" => "当电话号码、Email、地址都为空时,手机号码不能为空",
        "email.required_without_all" => "当电话号码、手机号码都为空时,Email和地址不能同时为空",
        "address.required_without_all" => "当电话号码、手机号码都为空时,Email和地址不能同时为空"
    ];
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30787.html

相关文章

  • Laravel思维导图之HTTP请求、响应、表单验证

    摘要:今天我来分享中层关于请求响应与表单验证的知识。手动创建验证请求之前的内容是直接使用的方法来实现表单验证。下一步到这篇为止,我完成了入门指南核心概念层的路由中间件控制器请求响应表单验证的学习和整理。 showImg(https://segmentfault.com/img/remote/1460000010882838); 今天我来分享 Laravel 中 HTTP 层关于请求、响应与表...

    lewif 评论0 收藏0
  • Laravel 5系列教程七:表单验证 Validation

    摘要:几乎在每一个应用当中都会有表单,而有表单基本就离不开表单验证。在中,其实可以说是有两种方式来进行表单验证使用和使用。然后,上面的验证规则是对于和两个字段,我们需要用户为其填充内容,不能为空。 原文来自:https://laravist.com/article/15 免费视频教程地址 https://laravist.com/series/laravel-5-basic Laravis...

    jindong 评论0 收藏0
  • 社交系统ThinkSNS+ 如何利用 Laravel 表单验证验证用户名(我朝独有需求,两个字母

    摘要:言归正传,之所以写继篇,其实是来检讨的,上一次发表了如何计算字符显示长度后,有网友几经测试后告知有问题。简言之单字节字符占,多字节字符占字节。 什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+。 后端框架使用laravel,每周和 laravel ...

    xiaodao 评论0 收藏0
  • 【日常填坑】之ajax请求laravelapi接口

    摘要:合适和够用是最完美的追求。比如从页面去请求的资源。它允许浏览器向跨源服务器,发出请求,从而克服了只能同源使用的限制。定义在中的路由都是无状态的,并且会应用中间件组。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和够用是最完美的追求。 个人网站:http://www.linganm...

    Arno 评论0 收藏0
  • 【日常填坑】之ajax请求laravelapi接口

    摘要:合适和够用是最完美的追求。比如从页面去请求的资源。它允许浏览器向跨源服务器,发出请求,从而克服了只能同源使用的限制。定义在中的路由都是无状态的,并且会应用中间件组。 关于作者 程序开发人员,不拘泥于语言与技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,App端使用Apicloud混合式开发。合适和够用是最完美的追求。 个人网站:http://www.linganm...

    neu 评论0 收藏0

发表评论

0条评论

wapeyang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<