当其中之一输入未成功通过验证时,我试图显示带有数组输入的自定义验证消息,因为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在验证输入数组方面没有提及太多。
答案 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;
}
我希望这对其他有相同疑问的人有所帮助,因为此处大多数类似的问题都没有简洁的答案。如果对此有更好的答案,或者存在更干净的方法,我将很高兴阅读。