Zend框架2中的控制器调度错误

时间:2014-02-17 05:34:58

标签: php json zend-framework zend-framework2

我从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);
}

响应

enter image description here

第一次和第二次打印显示正确的值。但是当我尝试显示错误的值并从“captureTo”,“terminate”和“children”添加一些其他值作为受保护时,从toJsonModel获取值后。

我不知道为什么它会给我错误的信息。

任何人都可以引导我走正确的道路并告诉我问题是什么吗?

提前致谢。

修改 我正在添加新的屏幕截图以显示完整的消息。

错误

  

{“name”:“未找到电子邮件”,“消息”:“此电子邮件未找到任何帐户   地址 “” 代码 “:404,” 的requestId “:” 12" , “理由”: “错误控制器不能分派”, “display_exceptions”:真, “控制器”: “RSMobile \控制器\ ForgotPassword”, “controller_class”:空}

enter image description here

2 个答案:

答案 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
}