【问题标题】:Controller dispatch error in Zend framework 2Zend 框架 2 中的控制器调度错误
【发布时间】:2014-02-17 05:34:57
【问题描述】:

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

回应

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

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

谁能指导我正确的道路并告诉我问题是什么?

提前致谢。

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

错误

{"name":"Email Not Found","message":"找不到使用此电子邮件的帐户 地址。","code":404,"requestId":"12","re​​ason":"error-controller-cannot-dispatch","display_exceptions":true,"controller":"RSMobile\Controller\ForgotPassword", "controller_class":null}

【问题讨论】:

  • 到底出了什么问题?
  • 我收到“调度错误”。看截图。

标签: php json zend-framework zend-framework2


【解决方案1】:

我终于解决了这个问题。

每当出现问题时,我都会从控制器中抛出一些错误。当找不到电子邮件时,我曾经抛出 404。这是导致此错误的原因。

起初我认为这是与 JSON 模型有关的问题。但是感谢@Bilal 帮助我解决了这个问题。

当我从控制器抛出 404 时,默认情况下会将所有这些数据附加到最后。但是当我抛出 404 以外的任何错误时,它就可以工作。

【讨论】:

  • 感谢您的帮助,这也为我解决了。只想说这是最愚蠢的功能。我向你挥舞拳头ZF2!!!
【解决方案2】:

这是因为您从方法 toJsonModel 返回了一个 JsonModel 的对象。

return new JsonModel($data);

因此,每个对象都有一些可用于操作数据的属性。查看Zend\View\Model\JsonModelhere的文档

所以实际上这些值并没有错,但是有一种方法可以访问对象的属性。

更新

附加调度事件

public function onBootstrap($e)
{
    // some stuff
    $eventManager = $e->getApplication()->getEventManager();
    $eventManager->attach("dispatch", function($e) {
        echo "Dispatch!";
    });
    // some stuff
}

【讨论】:

  • 我不想将它添加到这里。顺便说一句,如果我在不同的控制器中使用相同的功能,它可以正常工作并且不会将此数据添加到对象。
  • 因为我想将它作为 API 响应返回,不应该添加到这里。
  • @BSThakrar 您只看到该数据是因为您正在转储JsonModel。删除所有 printprint_rvar_dump 语句,您将只得到呈现的 json 字符串。
  • @BSThrakar 显示您的错误消息的屏幕截图的最后一行丢失了。如果您将其包含在问题的文本中而不是依赖于屏幕截图,这可能会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多