如何更改 ParamFetcher 给出的错误信息?

How to change an error message given by ParamFetcher?

使用 ParamFetcher 进行验证非常优雅,但错误消息并不漂亮。它包含许多我不想向 api 用户显示的不必要信息。

例如:

"Query parameter parent_id value 'a' violated a constraint (Query parameter value 'a', does not match requirements '\d+')"

我想将此消息转换为更简单的消息,例如:"parent_id must be an integer"

我该怎么做?

报错代码如下。而且我看不出有什么方法可以提供其他错误消息。

也许还有另一种验证查询参数的方法。

$constraint = new Regex(array(
         'pattern' => '#^'.$config->requirements.'$#xsu',
         'message' => sprintf(
                    "%s parameter value '%s', does not match requirements '%s'",
                    $paramType,
                    $param,
                    $config->requirements
         ),
));

源代码:https://github.com/FriendsOfSymfony/FOSRestBundle/blob/master/Request/ParamFetcher.php#L220

我向 FOSRestBundle 发出了拉取请求来解决这个问题https://github.com/FriendsOfSymfony/FOSRestBundle/pull/1015

您可以如下图使用

@QueryParam(name="parent_id", requirements={"rule" = "\d+", "error_message" = "parent_id must be an integer"}, strict=true, nullable=true, description="Parent Id")

错误信息:

{
    "code": 400,
    "message": "parent_id must be an integer"
}