«Метод [validateEach] не существует» Laravel 4.2 - PullRequest
0 голосов
/ 07 февраля 2019

Я создал пользовательский валидатор:

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',
        ]);

я получаю сообщение об ошибке:

error: {type: "BadMethodCallException", сообщение: "Method [validateEach] не существует. ",…} файл:" /home/.../vendor/laravel/framework/src/Illuminate/Validation/Validator.php "строка: 2564 сообщение:" Метод [validateEach] не существует. "тип: "BadMethodCallException"

что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Проверка отдельного поля

$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 +

0 голосов
/ 08 февраля 2019

each ()

Проблема была частично решена прямым вызовом нативного метода $v->each() для пользовательского правила phone:

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

$validator->each('phones', ['required', 'phone']);

, но он позволяет повторять проверку только длямассивы значений, но не объектов

0 голосов
/ 07 февраля 2019

Ваша проблема в этой части: required|each.

Не существует такой вещи, как each правило проверки.Посмотрите на документы список доступных правил проверки: документы

...