Пользовательское сообщение об ошибке для проверки 'requiredIf` в laravel - PullRequest
4 голосов
/ 30 октября 2019

Я работаю над проектом Laravel 5.8 и пытаюсь показать пользовательские сообщения проверки для проверки, которая использует правило проверки requiredIf.

Вот как я его настроил:

$validation = Validator::make(
    $request->all(),
    [
        ...
        'sum' => [
            Rule::requiredIf(function() use ($request){
                $model = Model::find($request->id);
                return $model->is_special; //returns a boolean value
            }),
            'numeric'
        ],
        ...
    ],
    [
        ...
        'sum.required_if' => 'This cannot be blank',
        'sum.numeric' => 'Must use a number here',
        ...
    ]
);

Теперь проверка работает правильно, и пользовательское сообщение для проверки numeric отображается как должно, но сообщение, которое я получаю дляrequiredIf() - это стандартное сообщение об ошибке Laravel.

Я также пытался использовать 'sum.requiredIf' => '...', но он тоже не сработал и, похоже, не может найти документацию или пример для этого сценария.

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Я немного повозился с этим и заметил, что для того, чтобы это работало, мне нужно было определить

'sum.required' => 'This cannot be blank'

, а не 'sum.required_if' => 'This cannot be blank',.

Не уверен, является ли это ожидаемым поведением или просто обходным путем, но я делаю вывод, что при обратном вызове Rule::requiredIf(function() use ($request){...}) параметры :other и :value не передаются, поэтому он возвращается к required обмену сообщениями иЯ думаю, это имеет смысл, поскольку required_if и required не будут использоваться на одном и том же :attribute.

Надеюсь, это поможет любому, кто сталкивается с этой проблемой.

1 голос
/ 30 октября 2019

Во-первых, создайте правило имя isSpecial или что-либо еще

php artisan make:rule isSpecial

Перейдите в App \ Rules \ isSpecial.php

    private $id;

    public function __construct($id) // pass id or what you need
    {
        //
        $this->id=$id;
    }

    public function passes($attribute, $value) // customize your rules here
    {
        //
        return Model::find($request->id)->is_special;
    }


    public function message() // here is answer for your question
    {
        return 'The validation error message.'; // your message
    }

в вашем контроллере

 use App\Rules\isSpecial;

  \Validator::make($request->all(), [
            'sum' => new isSpecial() ,
  ])->validate();

другая идея:

Указание пользовательских сообщений в языковых файлах В большинстве случаев вы, вероятно, будете указывать свои пользовательские сообщения в языковом файле, а не передавать их непосредственно вValidator. Для этого добавьте свои сообщения в пользовательский массив в языковом файле resources / lang / xx / validation.php.

'custom' => [
    'email' => [
        'required' => 'We need to know your e-mail address!',
    ],
],

Простое замечание: - вместо использования я рекомендую использовать HTTP-запросы проверка в вашем контроллере и функция direct

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