Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 将验证错误消息格式化为嵌套关联数组_Laravel_Validation_Laravel 5.7 - Fatal编程技术网

Laravel 将验证错误消息格式化为嵌套关联数组

Laravel 将验证错误消息格式化为嵌套关联数组,laravel,validation,laravel-5.7,Laravel,Validation,Laravel 5.7,我有一个Json数据对象,如下所示 { "name": "something", "location": { "city": "some where", "country": "some where", } } 用于验证请求的规则是 [ 'name' => 'required', 'location.city' => 'required', 'location.country' => 'required' ] 返回错误消

我有一个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"
    ]
  }
}
有可用的默认方法吗? 我正在使用
illumb\Foundation\Http\FormRequest
是吗?


在您的情况下,您需要自己生成错误消息。您仍然可以使用
resources/lang/en/validation
messages文件中的默认消息

$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
}

对于那些寻找解决方案的人,我就是这样实现的

<?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));
    }
}

它只会更改消息部分,如
城市字段是必需的
我需要更改键
位置。城市
。请看一下我的回复样本
<?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));
    }
}