Я пытаюсь показать настраиваемое сообщение проверки с входами массива, когда один из них не проходит проверку успешно, поскольку ошибка, которую 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 не упоминает много о проверке входных массивов.
@TharakaDilshan Да, если я удалю метод переопределения messages(), он работает хорошо, но я не хочу, чтобы Laravel показывал сообщение по умолчанию, которое он использует при получении массива входных данных, я хочу изменить это сообщение, чтобы оно не отображалось например: The format of link.1 is invalid. вместо этого я хочу что-то вроде The format of 'value_submitted' is invalid.






Готово, метод 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;
}
Я надеюсь, что это может быть полезно другим людям, у которых есть такие же сомнения, поскольку на большинство подобных вопросов здесь нет краткого ответа. Если есть лучший ответ на этот вопрос или более чистый способ, если он существует, я был бы рад его прочитать.
Ваша проверка работает должным образом?