Laravel 表单验证的一个问题,谢谢大家?

protected function validator(array $data)
    {
        $ip = DB::table('users')->whereRaw('ip = ? and created_at > ?', [get_client_ip(), Carbon::now()->subMinutes(60)])->count();
        $data = array_add($data,'ip',(string)$ip);
        return Validator ::make($data, [
            'name'     => 'required|string|max:255',
            'email'    => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'captcha'  => 'required|captcha',
            'ip'       => 'required|same:0',
        ], [
            'captcha.required' => '请输入验证码!',
            'captcha.captcha'  => '验证码错误',
            "ip.same"      => "同一IP在60分钟内无法再次注册",
        ]);
    }

追加的IP字段假如不等于0的话就提示错误,等于0的时候就默认通过验证.

请问我这段验证哪里错了?不管数据库返回0还是1都会提示同一IP在60分钟内无法再次

张雷
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3

你的字段验证用错了。

protected function validator(array $data)
{
        $ip = DB::table('users')->whereRaw('ip = ? and created_at > ?', [get_client_ip(), Carbon::now()->subMinutes(60)])->count();
        $data = array_add($data,'ip',(int)$ip);
        return Validator ::make($data, [
            'name'     => 'required|string|max:255',
            'email'    => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'captcha'  => 'required|captcha',
            'ip'       => 'required|integer|in:0',
        ], [
            'captcha.required' => '请输入验证码!',
            'captcha.captcha'  => '验证码错误',
            "ip.same"      => "同一IP在60分钟内无法再次注册",
        ]);
}

same的用法是看是否匹配另一个字段,比如这样的

$data = ['name' => 'david', 'other_name' => 'david'];
Validator::make($data, [
    'name' => 'same:other_name'
]);
7年前 评论

验证字段值和指定的 字段( field ) 值是否相同。 same后要写验证的字段 不是值

7年前 评论
张雷

@DavidNineRoc 非常感谢哥们~

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!