【问题标题】:"Method [validateEach] does not exist" Laravel 4.2“方法 [validateEach] 不存在” Laravel 4.2
【发布时间】:2019-07-01 12:58:17
【问题描述】:

我已经创建了自定义验证器:

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"

我做错了什么?

【问题讨论】:

  • 这是我第一次看到each。这是自定义规则吗?
  • @Mozammil 不,它是原生的 - 检查 the line 231

标签: php arrays laravel validation laravel-4.2


【解决方案1】:

你的问题是这部分:required|each

没有each 验证规则这样的东西。查看文档以获取可用验证规则的列表:docs

【解决方案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+

【讨论】:

    【解决方案3】:

    每个()

    通过直接调用本机方法$v->each() 为自定义规则phone 部分解决了问题:

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

    但它允许您仅对值数组而不是对象进行迭代验证

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2018-07-09
      • 2016-10-28
      • 2020-03-20
      相关资源
      最近更新 更多