Laravel验证器响应嵌套数组

时间:2016-04-27 00:29:43

标签: php json validation laravel vue.js

是否可以从嵌套数组中扩展验证器响应。通常,Laravel以“点符号”作为回应,例如:

    [
        'organisation.name'          => 'required|max:60|min:3',
        'organisation.avatar'        => '',
        'organisation.phone'         => 'required|max:25|min:5',
        'organisation.paid_staff'    => 'required|numeric'
    ]

organisation.name wold返回错误:

{
  "message": "422 Unprocessable Entity",
  "errors": {
    "organisation.name": [
      "The organisation name has already been taken."
    ]
  },
  "statusCode": 422
};

我想在这里扩展点符号:

{
  "message": "422 Unprocessable Entity",
  "errors": {
    "organisation": {
        "name": [
            "The organisation name has already been taken."
        ]
    }
  },
  "statusCode": 422
};

有人能说清楚这个吗?

2 个答案:

答案 0 :(得分:1)

我们通过扩展********mail.com类方法App\Exceptions\Handler实现了这一结果,如下所示:

invalidJson()

我们有一个名为/** * Convert a validation exception into a JSON response. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Validation\ValidationException $exception * @return \Illuminate\Http\JsonResponse */ protected function invalidJson($request, ValidationException $exception) { $jsonResponse = parent::invalidJson($request, $exception); $original = (array) $jsonResponse->getData(); $jsonResponse->setData(array_merge($original, [ 'statusCode' => $exception->status, 'errors' => Arrays::expandDotNotationKeys((array) $original['errors']), ])); return $jsonResponse; } 的实用工具类,方法Arrays如下所示:

expandDotNotationKeys()

完成!无需更改本地语言文件。

答案 1 :(得分:0)

我自己还没有这样做,但看着docs提示 -

  

在许多情况下,您可能希望指定属性特定的自定义   语言文件中的消息,而不是直接传递给它   验证器。为此,请将您的消息添加到自定义数组中   resources / lang / xx / validation.php语言文件。

您的语言文件

'custom' => [
    'organisations' => [
        'name' => [
             'required' => 'The organisation name has already been taken!',
        ],
    ],
],