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

时间:2018-10-04 17:49:42

标签: php arrays laravel laravel-5.5

当其中之一输入未成功通过验证时,我试图显示带有数组输入的自定义验证消息,因为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,依此类推... < / p>

但是,如果执行此操作,则在显示错误时,我的视图上会出现以下错误:

Array to string conversion

vendor/laravel/framework/src/Illuminate/Support/MessageBag.php的{​​{1}}上引发了错误。

我在做什么错?,因为Laravel在验证输入数组方面没有提及太多。

1 个答案:

答案 0 :(得分:0)

完成后,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;
    }

我希望这对其他有相同疑问的人有所帮助,因为此处大多数类似的问题都没有简洁的答案。如果对此有更好的答案,或者存在更干净的方法,我将很高兴阅读。