为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
翻阅古今 2021-12-24 15:31:35
我正在 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):<?phpreturn array(    'controllers' => array(        'invokables' => array(            'Timesheet\Controller\Timesheet' => 'Timesheet\Controller\TimesheetController',            'Timesheet\Controller\TimesheetRest' => 'Timesheet\Controller\TimesheetRestController'        )    ),
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

显示空白 message

仔细查看后,Zend/Mvc/View/Http/RouteNotFoundStrategy有一个功能prepareNotFoundViewModel可以添加message到响应中。但是,这仅在message尚未定义时发生。将我的代码更改为:


$response = $this->getResponse();

$response->setStatusCode(404);

return new JsonModel(array(

    'message' => '',

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

));

然后会给我一个响应体:


{

    "message": "",

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

}

这至少消除了两个消息之间的混淆。


消除 message

但是,更改代码以直接返回响应,而不是使用 a JsonModel,message根本不会被注入。以下代码:


$response = $this->getResponse();

$response->setStatusCode(404);

$response->setContent(json_encode(array(

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

)));

return $response;

给出这个作为回应:


{

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

}


查看完整回答
反对 回复 2021-12-24
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号