php - Laravel 验证器响应嵌套数组

标签 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 的错误将返回:

{
  "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
};

任何人都可以阐明这一点吗?

最佳答案

我们通过扩展 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 的 Utility 类,其方法 expandDotNotationKeys() 如下所示:

/**
 * Expands arrays with keys that have dot notation
 *
 * @param Array $array
 *
 * @return Array
 */
public static function expandDotNotationKeys(Array $array)
{
    $result = [];

    foreach ($array as $key => $value) {
      array_set($result, $key, $value);
    }

    return $result;
}

完成!无需更改母语文件。

关于php - Laravel 验证器响应嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36878182/

相关文章:

php - 验证更新表格

php - 双爆一个数组

php - HTML5 表单提交等效 $.post

json - 属性服务 token 不能为空

scala - Spark SQL - 使用模式读取 csv

vba - 检查数据验证是否通过

php - 创建 MYSQL 表时的日期时间和时间戳问题

php - Magento RESTful API 用于将产品添加到购物车

json - 如何解析golang中的json数组?

php - SQL 表中的 JSON 得到双结果