输入数组验证消息错误 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.php
的 line 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;
}
我希望这对其他有同样疑问的人有所帮助,因为这里的大多数类似问题都没有简洁的答案。如果有更好的答案或更简洁的方法(如果存在),我很乐意阅读它。
当其中一个未成功通过验证时,我正在尝试显示带有数组输入的自定义验证消息,因为 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.php
的 line 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;
}
我希望这对其他有同样疑问的人有所帮助,因为这里的大多数类似问题都没有简洁的答案。如果有更好的答案或更简洁的方法(如果存在),我很乐意阅读它。