首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从ZendFramework2中的调度事件返回JsonModel错误?

如何从ZendFramework2中的调度事件返回JsonModel错误?
EN

Stack Overflow用户
提问于 2014-08-25 13:50:05
回答 2查看 2.3K关注 0票数 0

我想做什么,

我有一个使用ZendFramework2的PHP应用程序,它有一个“可视”端(它返回漂亮的HTML网页)和一个API端(它只是返回JSON)。当请求发送到我们的服务器时,它将通过onBootstrap( \Zend\Mvc\MvcEvent )函数在Module.php中路由。引导函数执行一些常规设置和检查(是用户签名的in...etc)。然后为\Zend\Mvc\Controller\AbstractRestfulController(我们的API控制器)附加一个分派函数,为\Zend\Mvc\Controller\AbstractActionController(“视觉”控制器)附加另一个分派函数。

在分派函数中,会检查和设置更多会话特定的内容,有时还会出现错误。如果\Zend\Mvc\Controller\AbstractActionController的分派函数发生错误,那么它只是将错误消息返回给视图,视图将其显示给用户。如果\Zend\Mvc\Controller\AbstractRestfulController的分派函数发生错误,我希望它返回一个带有错误信息和适当的响应头(400,404...etc)的JsonModel。

发生了什么

\Zend\Mvc\Controller\AbstractRestfulController的调度函数发生错误时,响应头被设置,但主体没有设置。最重要的是,操作仍然被路由到控制器,所以如果控制器指定了一个新的响应头,那么它就会覆盖上一个响应头。

下面是我代码的摘录:

代码语言:javascript
运行
AI代码解释
复制
public function onBootstrap( \Zend\Mvc\MvcEvent $event ) {

    ...

    $event_manager          = $event->getApplication()->getEventManager();
    $shared_manager         = $event_manager->getSharedManager();

    ...

    // Dispatch event for AbstractRestfulController calls
    $shared_manager->attach('Zend\Mvc\Controller\AbstractRestfulController', 'dispatch', function($event) {

        ...

        try {
            $organization = $organization_interface->get($id);
        } catch(Exception $e) {
            $event->getResponse()->setStatusCode($e->getCode());
            return new JsonModel(array(
                'error' => $e->getMessage(),
            ));
        }

        ...

    }, 100);

    ...

}

所以我知道返回的JsonModel不能工作,因为它是从调度函数而不是控制器返回的。我想知道的是一种“简单”的方法来发送我的JsonModel作为响应,并阻止框架在控制器中运行路由操作。

任何和所有的帮助都是感激的。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-26 01:56:58

如果您正在寻找从那个JSON模型返回的字符串,那么这就足够了-

很明显,要获得调度操作,而不是JSON模型,所以请尝试以下操作-

而不是-

代码语言:javascript
运行
AI代码解释
复制
return new JsonModel(array(
    'error' => $e->getMessage(),
));

代码语言:javascript
运行
AI代码解释
复制
$view = new JsonModel(array(
            'error' => $e->getMessage(),
        ));

echo $view->serialize();
http_response_code($e->getCode());    //Added the line of code as per suggested in the comment by B1NARY
exit();

这将返回JSON字符串。

如果这不是你要找的,请告诉我们。

票数 3
EN

Stack Overflow用户

发布于 2016-01-31 03:27:25

对我来说,这是一个更好的zf2ish解决方案:

代码语言:javascript
运行
AI代码解释
复制
$this->response->setStatusCode(Response::STATUS_CODE_401);
$viewModel = new JsonModel(['error' => 'Unauthorized', 'error_description' => $exception->getMessage()]);
$event->setViewModel($viewModel);
$event->stopPropagation(true);
return $viewModel;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25494899

复制
相关文章
MySQL中的事件调度器
​ 事件调度器(Event Schedule)类似于Linux中的crontab(也就是定时任务),下面介绍事件调度器的基本使用方法
俺也想起舞
2021/10/26
1.1K0
如何在 Go 中优雅的处理和返回错误(1)——函数内部的错误处理
在使用 Go 开发的后台服务中,对于错误处理,一直以来都有多种不同的方案,本文探讨并提出一种从服务内到服务外的错误传递、返回和回溯的完整方案,还请读者们一起讨论。
amc
2021/09/18
9.5K0
如何在 Go 中优雅的处理和返回错误(1)——函数内部的错误处理
Python开发中如何优雅地区分错误和正确的返回结果
Python提供了强大的异常处理机制。通过这种方式,我们可以明确地分离错误和正常返回:
运维开发王义杰
2023/09/19
3850
Python开发中如何优雅地区分错误和正确的返回结果
Mysql的事件调度器
事件调度器是Mysql5.1后新增的功能,可以将数据库按自定义的时间周期触发某种操作,可以理解为时间触发器,类似Linux系统下的任务调度器crontab.
Dream城堡
2019/02/26
8970
[iOS开发]JSONModel源码学习
首先,在这个模型类的对象被初始化的时候,遍历自身到所有的父类(直到JSONModel为止),获取所有的属性,并将其保存在一个字典里。获取传入字典的所有key,将这些key与保存的所有属性进行匹配。如果匹配成功,则进行kvc赋值。
Billy Miracle
2022/05/08
1.4K0
Redis中事件循环(Event loop)的原理,实现事件的调度和分发
它是由事件处理器(Event Handler)、文件事件(File Event)、时间事件(Time Event)以及事件管理器(Event Manager)四个主要组件构成。
一凡sir
2023/09/23
9330
Redis中事件循环(Event loop)的原理,实现事件的调度和分发
从 gitlab 事件中吸取的教训
题注:这是一篇去年的文章,今早看到 gitlab 运维人员愚蠢地 rm -rf, 心有戚戚焉,故而重发这篇文章,供大家参考。 ---- 这两天不是很太平,程序圆媛猿亲们出门前最好拜拜祖师爷 Ada,然
tyrchen
2018/03/29
9660
从 gitlab 事件中吸取的教训
如何设计API返回码(错误码)?
—1— 前言 客户端请求API,通常需要通过返回码来判断API返回的结果是否符合预期,以及该如何处理返回的内容等。 相信很多同学都吃过返回码定义混乱的亏,有的API用返回码是int类型,有的是string类型,有的用0表示成功,又有的用1表示成功,还有用“true”表示成功,碰上这种事情,只能说:头疼。 API返回码的设计还是要认真对待,毕竟好的返回码设计可以降低沟通成本以及程序的维护成本。 —2— HTTP 状态码 以HTTP状态码为例,为了更加清晰的表述和区分状态码的含义,HTTP状态做了分段。 对于
玄姐谈AGI
2022/03/03
8740
如何设计API返回码(错误码)?
客户端请求API,通常需要通过返回码来判断API返回的结果是否符合预期,以及该如何处理返回的内容等
KenTalk
2020/08/02
6.6K0
MySQL 事件调度器
事件调度器是定时触发执行的,在这个角度上也可以称作是"定时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行特定的语句/存储过程。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有SUPER权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。
用户1278550
2018/08/09
1.6K0
如何通过Kubernetes事件来报告错误
本文首发于 https://robberphex.com/error-reporting-with-kubernetes-events/
Robert Lu
2021/12/05
8020
一文详解MySQL中的事件调度器EVENT
MySQL中的事件调度器,EVENT,也叫定时任务,类似于Unix crontab或Windows任务调度程序。
数据和云
2020/04/01
2.3K0
PHP 如何从关联数组中移除并返回指定的键值对
该功能已经整合到 WPJAM Basic 插件中,并已免费提供下载,简单勾选或者设置下即可开启!
Denis
2023/04/14
5.3K0
http返回错误状态_状态码返回0
代码里面我刚刚开始的时候使用的是HttpPost发的请求,另外一边呢,刚刚开始的时候只有一个get请求在那等着呢。
全栈程序员站长
2022/11/01
2.6K0
http返回错误状态_状态码返回0
在 React 16 中从 setState 返回 null 的妙用[每日前端夜话0x7D]
在 React 16 中为了防止不必要的 DOM 更新,允许你决定是否让 .setState 更来新状态。在调用 .setState 时返回 null 将不再触发更新。
疯狂的技术宅
2019/06/11
14.7K0
Java 中如何限制方法的返回时间
可以使用 JDK 中的 ExecutorService 方法来对调用的方法进行处理。
HoneyMoose
2023/02/10
3.1K0
Java 中如何限制方法的返回时间
使用@ControllerAdvice如何返回给前端对应错误码
@ControllerAdvice可以捕获spring应用下面未被捕获异常,下面是常见代码:
johnhuster的分享
2022/03/29
7180
JSONModel源码解析 原
    做移动端开发,解析网络数据是必不可少的工作之一。iOS原生框架很早前就已经提供了将JSON数据直接映射成数组或者字典对象的方法,并且结合KVC,也可以将字典数据直接赋值给对象。但是这种方式十分不灵活,例如如果网络数据中的字段与我们数据模型中的字段不一致,某些网络数据的字段可能为nil等等都需要开发者单独的处理。使用JSOMModel可以十分方便的处理映射过程中的各种情况。
珲少
2018/08/15
1.3K0
JSONModel源码解析
                                                                            原
点击加载更多

相似问题

如何返回JsonModel数组

20

ZendFramework2调度事件不会在操作前运行

22

JSONModel返回零

11

JSONModel未触发更改事件

120

无法调度事件错误

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档