Я пытаюсь показать настраиваемое сообщение проверки с входами массива, когда один из них не проходит проверку успешно, поскольку ошибка, которую Laravel показывает по умолчанию, выглядит примерно так:

Формат link.1 недействителен.

И я хочу показать что-то вроде этого:

Формат "значения" недействителен.

Я читал, что есть метод под названием messages(), который я могу переопределить в файле запроса:

BannerRequest.php

<?php

namespace App\Http\Requests\Admin;

use Illuminate\Foundation\Http\FormRequest;

class BannerRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            "imagenes.*"        =>      "nullable|mimes:jpeg,png,jpg|max:5120",
            "links.*"           =>      "nullable|string|max:191|url",
            "idiomas.*"         =>      "required|string|max:191",
        ];
    }

    /**
     * Get the error messages for the defined validation rules.
     *
     * @return array
     */

    public function messages()
    {
        $messages = array();
        foreach($this->imagenes as $key => $valor) {
            $messages[] = array('imagenes.'.$key.'.mimes:jpeg,png,jpg' => "La imagen ".$valor." no contiene un formato válido");
            $messages[] = array('imagenes.'.$key.'.max:5120' => "La imagen ".$valor." no contiene un formato válido");

        }

        foreach($this->links as $key => $valor) {
            $messages[] = array('links.'.$key.'.url' => "El link ".$valor." no es una URL válida");

        }

        return $messages;
    }
}

Согласно документации:

Этот метод должен возвращать массив пар атрибут / правило и соответствующие им сообщения об ошибках.

Итак, поскольку я обрабатываю массив входных данных, я подумал, что должен перебрать их, чтобы получить их ключ, чтобы получить что-то вроде этого: link.0.validation_rule, затем link.1.validation_rule и так далее ...

Но если я это сделаю, при отображении ошибок я получаю следующую ошибку на моем представлении:

Array to string conversion

Ошибка выбрасывается на vendor/laravel/framework/src/Illuminate/Support/MessageBag.php в line 247.

Что я делаю не так? Поскольку Laravel не упоминает много о проверке входных массивов.

0
Aarón Gutiérrez 4 Окт 2018 в 20:49

1 ответ

Лучший ответ

Готово, метод messages() должен вернуть следующий массив сообщений:

    public function messages()
    {
        $messages = array();
        foreach($this->imagenes as $key => $valor) {
            $messages['imagenes.'.$key.'.mimes:jpeg,png,jpg'] = "La imagen ".$valor." no contiene un formato válido";
            $messages['imagenes.'.$key.'.max:5120'] = "La imagen ".$valor." no contiene un formato válido";


        }

        foreach($this->links as $key => $valor) {
            $messages['links.'.$key.'.url'] =  "El link ".$valor." no es una URL válida";

        }

        return $messages;
    }

Я надеюсь, что это может быть полезно другим людям, у которых есть такие же сомнения, поскольку на большинство подобных вопросов здесь нет краткого ответа. Если есть лучший ответ на этот вопрос или более чистый способ, если он существует, я был бы рад его прочитать.

0
Aarón Gutiérrez 4 Окт 2018 в 18:19