Как добавить пользовательское правило валидации в стандартный Validator :: make ($ data ... зарегистрироваться в laravel? - PullRequest
0 голосов
/ 14 сентября 2018

Я прочитал в документации, как создать новое пользовательское правило проверки .

Я сделал такое же, как в примере, но разрешить только строчные буквы.Класс с креативным именем Строчные .

Теперь я хочу добавить это в список Validator в RegisterController, сгенерированном из make: auth.Вот список, к которому я хочу добавить его:

return Validator::make($data, [
        'name' => 'required|string|max:255|**ADD MY VALIDATOR HERE**',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);

Очевидно, что здесь есть что-то, чего мне не хватает ... В документации сказано использовать тот, который я сделал следующим образом:

$request->validate([
'name' => ['required', 'string', new Lowercase],
]);

Что мне нужно сделать, чтобы иметь возможность добавить свое пользовательское правило в список выше?

РЕДАКТИРОВАТЬ 1:

Для запроса я показываю созданное мной правило.Это идентично тому, что в связанном примере в документации, но я изменил его название с Прописные буквы на Строчные буквы и strtoupper до strtolower

public function passes($attribute, $value)
{
    return strtolower($value) === $value;
}

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

У вас есть несколько вариантов.Можно было бы использовать ремесленника для создания правила

php artisan make:rule Lowercase

В итоге вы получили бы app \ rules \ Lowercase.php, который бы вы хотели выглядеть примерно так:

<?php

namespace App\Rules;

use Auth;
use Illuminate\Contracts\Validation\Rule;

class Lowercase implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return strtolower($value) === $value;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Must be lowercase!';
    }
}

«Как только правило было определено, вы можете присоединить его к валидатору, передав экземпляр объекта правила с другими вашими правилами валидации:«

Так в вашем RegisterController

use App\Rules\Lowercase;

return Validator::make($data, [
    'name' => ['required', 'string', 'max:255', new Lowercase],
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|confirmed',
]);

Второй вариант - использовать замыкание и не создавать пользовательское правило с ремесленником.Это хорошо работает, если вам не нужно использовать правило где-то еще.

Так что в вашем RegisterController вы можете сделать что-то вроде этого:

return Validator::make($data, [
     'name' => [
         'required',
         'max:255',
         function ($attribute, $value, $fail) {
             if (strtolower($value) != $value) {
                 $fail($attribute.' must be all lowercase.');
             }
         },
     ],
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|confirmed',
]);
0 голосов
/ 14 сентября 2018
$request->validate([
    'name' => ['required','string', 'max:255', 'new MyNewRuleClass(or Uppercase)'],
    'email' => ['required', 'string','email','max:255','unique:users'],
    'password' => ['required','string','min:6','confirmed'],
]);

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...