Синтаксический анализатор пользовательских правил проверки Laravel прерывается при получении нового объекта правила - PullRequest
0 голосов
/ 18 декабря 2018

Я создал несколько новых правил проверки для своего приложения Laravel, следуя документам Laravel https://laravel.com/docs/5.6/validation#custom-validation-rules,, однако, когда я пытаюсь зарегистрировать правила в моем массиве правил пользовательских запросов, выдается ошибка:

#message: "trim() expects parameter 1 to be string, object given"
#code: 0
#file: "/Users/ari/Projects/dps/sites/acg/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php"
#line: 217
#severity: E_WARNING

Мое пользовательское правило - NotContainsEmail.php:

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class NotContainsEmail implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        return (strpos($value, '@') !== false);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'This field cannot contain an email address.';
    }
}

Мой запрос - QuoteRespondRequest:

<?php namespace Client\Http\Requests\Quotes;

use App\Rules\NotContainsEmail;
use Client\Http\Requests\FormRequest;

class QuoteRespondRequest extends FormRequest
{
    public function rules()
    {
        return [
            'help' => ['string', 'nullable', new NotContainsEmail],
            'description' => ['string', 'nullable', new NotContainsEmail],
            'community' => ['string', 'nullable', new NotContainsEmail],
            'funding' => ['string', new NotContainsEmail],
        ];
    }
}

Я смущен ошибкой, поскольку документация Laravel явноутверждает, что я могу пройти через объект, но Illuminate\Validation\ValidationRuleParser.php@217 явно не может обрабатывать объекты.

Где я ошибся?

1 Ответ

0 голосов
/ 18 декабря 2018

Использование расширений Другим методом регистрации пользовательских правил проверки является использование метода extended на фасаде Validator.Давайте использовать этот метод в сервис-провайдере для регистрации пользовательского правила проверки: https://laravel.com/docs/5.7/validation

В AppServiceProvider

public function boot()
{
    Validator::extend('NotContainsEmail', function ($attribute, $value, $parameters, $validator) {
        // code here
    });

    Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {
        //return str_replace(...);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...