Форматировать сообщение об ошибке проверки как вложенный ассоциативный массив - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть объект данных Json, как показано ниже

{
  "name": "something",
  "location": {
    "city": "some where",
    "country": "some where",

  }
}

Правило, используемое для проверки запроса:

[
    'name' => 'required',
    'location.city' => 'required',
    'location.country' => 'required'
]

, которое возвращает сообщение об ошибке типа

{
  "name": [
    "The name field is required."
  ],
  "location.city": [
    "The location.city field is required."
  ],
  "location.county": [
    "The location.country field is required."
  ]
}

Как мне отформатировать сообщение об ошибке в виде вложенного массива, такого как Запрос.

{
  "name": [
    "The name field is required."
  ],
  "location": {
    "city": [
      "The city field is required"
    ],
    "country": [
      "The country field is required"
    ]
  }
}

Доступны ли методы по умолчанию?Я использую Illuminate\Foundation\Http\FormRequest

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

В вашем случае вам нужно создать сообщение об ошибке самостоятельно.вы все еще можете использовать сообщения по умолчанию в файле сообщений ressources/lang/en/validation.

$validator = Validator::make($request->all(), [
    'name' => 'required',
    'location.city' => 'required',
    'location.country' => 'required'
]);

if ($validator->fails()) {
    return response()->json($yourOwnFormat,422);
    //you can use $validator->errors() to build it
}
0 голосов
/ 08 ноября 2018

Для тех, кто ищет решение Вот как я реализовал

<?php 
namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;

class UserStoreRequest extends FormRequest
{
    public function rules()
    {
        return [
            'name' => 'required',
            'location.city' => 'required'
            'location.country' => 'required'
        ];
    }
    public function attributes()
    {
        return [
            'location.city' => 'City'
            'location.country' => 'Country'
        ];
    }
    protected function failedValidation(Validator $validator)
    {
        $errors = $validator->errors()->getMessages();
        $errors_formated = array();
        foreach ($errors as $key => $value) {
        array_set($errors_formated, $key, $value);
        }
        throw new HttpResponseException(response()->json(['error' => $errors_formated], 422));
    }
}

Результат $validator->errors()->getMessages() аналогичен array_dot() результату вспомогательной функции. Так что я сделал "Противоположность" array_dot(), также изменил имя моего атрибута на красивое имя

0 голосов
/ 08 ноября 2018

Это так? Документация Laravel - настройка сообщений об ошибках

public function messages()
{
    return [
        'location.city' => 'The city field is required',
        'location.county'  => 'The county field is required',
    ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...