ZF3:如何从动作函数发送JSON

时间:2017-04-28 18:16:31

标签: php json zend-framework3

当我想从动作函数发送json对象而不是视图时,我遇到了问题。

我已经像我这样配置了我的/config/modules.config.php ......

return [
    //...

    'view_manager' => [
        //...

        'strategies' => [
            'ViewJsonStrategy',
        ],
    ],
];

当我尝试从我的动作函数中返回一个JSON对象时......

public function loginAction(){
    $request = $this->getRequest();
    $log = new \File\LogWriter();
    $log->writeLog(get_class($this) . "::" . __FUNCTION__ . ": Dentro de loginAction()");

    $params = json_decode(file_get_contents('php://input'),true);
    $email = $params["email"];
    $password = $params["password"];

    $log->writeLog(get_class($this) . "::" . __FUNCTION__ . ": email: " . $email . " password: " . $password);

    return new JsonModel([
        "result"    => 0
    ]);             
}

我有这个错误......

  

致命错误:未捕获   Zend的\查看\异常\ RuntimeException的:   Zend \ View \ Renderer \ PhpRenderer :: render:无法呈现模板   “应用程序/登录/登录”;解析器无法解析为   档案   /var/www/html/31juegos/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php:494

     

堆栈跟踪:   #0 /var/www/html/31juegos/vendor/zendframework/zend-view/src/View.php(207):   的Zend \视图\渲染\ PhpRenderer->渲染()   #1 /var/www/html/31juegos/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy.php(105):   的Zend \视图\视图 - >呈现(对象(的Zend \视图\模型\ JsonModel))

     

#2 /var/www/html/31juegos/vendor/zendframework/zend-eventmanager/src/EventManager.php(322):   的Zend \的mvc \视图\ HTTP \ DefaultRenderingStrategy->呈现(对象(的Zend \的mvc \ MvcEvent))

     

#3 /var/www/html/31juegos/vendor/zendframework/zend-eventmanager/src/EventManager.php(171):   的Zend \ eventmanager进行\ EventManager-> triggerListeners(对象(的Zend \的mvc \ MvcEvent))

     #p /#/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /   Zend \ EventManager \ Ev in    /var/www/html/31juegos/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php 的   在线 494

我做错了什么?相同的代码在Zend Framework 2.4中运行良好。我正在使用php7.0。

1 个答案:

答案 0 :(得分:1)

当请求作为常规网页时,响应是网页(不是JSON)。 如果请求来自AJAX,则响应是JSON(并且它不需要视图,这是您正在获得的错误)。