输入数组验证消息错误 Laravel 5.5

Input array validation message error Laravel 5.5

当其中一个未成功通过验证时,我正在尝试显示带有数组输入的自定义验证消息,因为 Laravel 默认显示的错误如下所示:

The format of link.1 is invalid.

我想展示这样的东西:

The format of 'value' is invalid.

我读到有一个名为 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;
    }
}

根据文档:

This method should return an array of attribute / rule pairs and their corresponding error messages

所以,因为我正在处理输入数组,所以我认为我应该遍历它们以获得它们的密钥来得到这样的东西:link.0.validation_rule 然后 link.1.validation_rule 等等.. .

但是如果我这样做,在显示错误时,我的视图会出现以下错误:

Array to string conversion

错误在 vendor/laravel/framework/src/Illuminate/Support/MessageBag.phpline 247 上抛出。

我做错了什么?,因为 Laravel 没有提到很多关于验证输入数组的内容。

完成,messages() 方法应该 return 消息数组如下:

    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;
    }

我希望这对其他有同样疑问的人有所帮助,因为这里的大多数类似问题都没有简洁的答案。如果有更好的答案或更简洁的方法(如果存在),我很乐意阅读它。