从 Zend Framework 2 中的 404 JSON 响应中删除其他消息

我正在 ZF2 中创建一个 RESTful API,为每个路由返回 JSON 响应。对于其中一个路由,我需要返回 404 响应,但这return $this->notFoundAction();是不可接受的,因为它返回的是视图而不是 JSON。因此,我正在执行以下操作:


$response = $this->getResponse();

$response->setStatusCode(404);

return new JsonModel(array(

    'error_message' => "Client $clientRef doesn't exist"

));

对此进行测试,我得到了 404 状态代码的良好响应,并显示了我的错误消息。但是,响应中还包含其他 Zend 生成的消息:


{

    "error_message": "Client test-client doesn't exist",

    "message": "Page not found.",

    "reason": "error-controller-cannot-dispatch",

    "display_exceptions": true,

    "controller": "Timesheet\\Controller\\TimesheetRest",

    "controller_class": null

}

如果我在配置中更改display_not_found_reason并且display_exceptions都更改为false,那么它将删除一些其他详细信息,但message仍然保留:


{

    "error_message": "Client test-client doesn't exist",

    "message": "Page not found."

}

如何从响应正文中删除所有额外的详细信息?


请注意,我只在返回 404 状态时收到这些消息。返回400、403或409时,返回的只是我的错误信息,没有任何附加信息。


不确定它是否相关,但相关模块的配置文件如下(注意我有 2 个控制器,一个用于前端,一个用于 API):


<?php

return array(

    'controllers' => array(

        'invokables' => array(

            'Timesheet\Controller\Timesheet' => 'Timesheet\Controller\TimesheetController',

            'Timesheet\Controller\TimesheetRest' => 'Timesheet\Controller\TimesheetRestController'

        )

    ),


翻阅古今
浏览 137回答 1
1回答

绝地无双

显示空白 message仔细查看后,Zend/Mvc/View/Http/RouteNotFoundStrategy有一个功能prepareNotFoundViewModel可以添加message到响应中。但是,这仅在message尚未定义时发生。将我的代码更改为:$response = $this->getResponse();$response->setStatusCode(404);return new JsonModel(array(&nbsp; &nbsp; 'message' => '',&nbsp; &nbsp; 'error_message' => "Client $clientRef doesn't exist"));然后会给我一个响应体:{&nbsp; &nbsp; "message": "",&nbsp; &nbsp; "error_message": "Client test-client doesn't exist"}这至少消除了两个消息之间的混淆。消除 message但是,更改代码以直接返回响应,而不是使用 a JsonModel,message根本不会被注入。以下代码:$response = $this->getResponse();$response->setStatusCode(404);$response->setContent(json_encode(array(&nbsp; &nbsp; 'error_message' => "Client $clientRef doesn't exist")));return $response;给出这个作为回应:{&nbsp; &nbsp; "error_message":"Client test-client doesn't exist"}
打开App,查看更多内容
随时随地看视频慕课网APP