我从zend控制器返回Json响应。
这是我的代码
控制器代码
public function get()
{
$result = //calling other function and getting response in array
print("value in controller before calling toJsonModel");
print_r($result);
$temp = $this->toJsonModel($result);
var_dump($temp);
return $temp;
}
toJsonModel 功能
public function toJsonModel($data = array())
{
$data['requestId'] = $this->getHeader('RequestId');
print("Value just before returning to controller");
print_r($data);
return new JsonModel($data);
}
响应
第一次和第二次打印显示正确的值。但是当我尝试显示错误的值并从“captureTo”,“terminate”和“children”添加一些其他值作为受保护时,从toJsonModel获取值后。
我不知道为什么它会给我错误的信息。
任何人都可以引导我走正确的道路并告诉我问题是什么吗?
提前致谢。
修改 我正在添加新的屏幕截图以显示完整的消息。
错误:
{“name”:“未找到电子邮件”,“消息”:“此电子邮件未找到任何帐户 地址 “” 代码 “:404,” 的requestId “:” 12" , “理由”: “错误控制器不能分派”, “display_exceptions”:真, “控制器”: “RSMobile \控制器\ ForgotPassword”, “controller_class”:空}
答案 0 :(得分:2)
我终于解决了这个问题。
每当出现问题时,我都会从控制器中抛出一些错误。当电子邮件找不到时我常常扔404。这导致了这个错误。
起初我认为这是与JSON模型相关的问题。但感谢@Bilal帮助我解决问题。
当我从控制器抛出404时,默认情况下会在末尾附加所有这些数据。但是当我抛出除404之外的任何错误时,它都有效。
答案 1 :(得分:1)
这是因为您从方法JsonModel
返回toJsonModel
的对象。
return new JsonModel($data);
因此,每个对象都有一些可用于操作数据的属性。请参阅Zend\View\Model\JsonModel
here
实际上,值并没有错,但有一种方法可以访问对象的属性。
<强>更新强>
附加调度事件
public function onBootstrap($e)
{
// some stuff
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach("dispatch", function($e) {
echo "Dispatch!";
});
// some stuff
}