首页 > 解决方案 > “方法 [validateEach] 不存在” Laravel 4.2

问题描述

我创建了自定义验证器:

namespace App\Validators;

class PhoneValidationRule extends \Illuminate\Validation\Validator {

    public function validatePhone($attribute, $value, $parameters)
    {
        return preg_match("/^[\+]?[-()\s\d]{4,17}$/", $value);
    }
}

并注册:

class ValidatorServiceProvider extends ServiceProvider {


    public function boot()
    {
        \Validator::resolver(function($translator, $data, $rules, $messages)
        {
            return new PhoneValidationRule($translator, $data, $rules, $messages);
        });
    }
...

如果我将其称为字段,它工作正常:

        $validator = Validator::make($input, [
            'emails' => 'required|each:email',
            'phone' => 'required|phone',
        ]);

但是当我尝试将它应用于数组时:

        $validator = Validator::make($input, [
            'emails' => 'required|each:email',
            'phones' => 'required|each:phone',
        ]);

我收到错误消息:

错误:{类型:“BadMethodCallException”,消息:“方法 [validateEach] 不存在。”,...} 文件:“/home/.../vendor/laravel/framework/src/Illuminate/Validation/Validator.php”行:2564 消息:“方法 [validateEach] 不存在。” 类型:“BadMethodCallException”

我做错了什么?

标签: phparrayslaravelvalidationlaravel-4.2

解决方案


验证单个字段

$validator = Validator::make($request->all(), [
    'email' => 'required|email',
    'phone' => 'required|phone',
]);

验证数组

$validator = Validator::make($request->all(), [
    'emails' => 'required|array',
    'emails.*' => 'email',
    'phones' => 'required|array',
    'phones.*' => 'phone',
]);

* Laravel 5.3+


推荐阅读