简体   繁体   English

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

[英]ZF3: How to send a JSON from an action function

I have a problem when I want to send a json object instead of a view from an action function. 我想发送json对象而不是动作函数的视图时遇到问题。

I have configured my /config/modules.config.php like this ... 我已经像这样配置了/config/modules.config.php ...

return [
    //...

    'view_manager' => [
        //...

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

And when I try to return a JSON Object from my action function ... 当我尝试从动作函数返回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
    ]);             
}

I've got this error ... 我有这个错误...

Fatal error : Uncaught Zend\\View\\Exception\\RuntimeException: Zend\\View\\Renderer\\PhpRenderer::render: Unable to render template "application/login/login"; 致命错误 :未捕获的Zend \\ View \\ Exception \\ RuntimeException:Zend \\ View \\ Renderer \\ PhpRenderer :: render:无法呈现模板“ application / login / login”; resolver could not resolve to a file in /var/www/html/31juegos/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php:494 解析器无法解析为/var/www/html/31juegos/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php:494中的文件

Stack trace: #0 /var/www/html/31juegos/vendor/zendframework/zend-view/src/View.php(207): Zend\\View\\Renderer\\PhpRenderer->render() #1 /var/www/html/31juegos/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy.php(105): Zend\\View\\View->render(Object(Zend\\View\\Model\\JsonModel)) 堆栈跟踪:#0 /var/www/html/31juegos/vendor/zendframework/zend-view/src/View.php(207):Zend \\ View \\ Renderer \\ PhpRenderer-> render()#1 / var / www / html / 31juegos / vendor / zendframework / zend-mvc / src / View / Http / DefaultRenderingStrategy.php(105):Zend \\ View \\ View-> render(Object(Zend \\ View \\ Model \\ JsonModel))

#2 /var/www/html/31juegos/vendor/zendframework/zend-eventmanager/src/EventManager.php(322): Zend\\Mvc\\View\\Http\\DefaultRenderingStrategy->render(Object(Zend\\Mvc\\MvcEvent)) #2 /var/www/html/31juegos/vendor/zendframework/zend-eventmanager/src/EventManager.php(322):Zend \\ Mvc \\ View \\ Http \\ DefaultRenderingStrategy-> render(Object(Zend \\ Mvc \\ MvcEvent))

#3 /var/www/html/31juegos/vendor/zendframework/zend-eventmanager/src/EventManager.php(171): Zend\\EventManager\\EventManager->triggerListeners(Object(Zend\\Mvc\\MvcEvent)) #3 /var/www/html/31juegos/vendor/zendframework/zend-eventmanager/src/EventManager.php(171):Zend \\ EventManager \\ EventManager-> triggerListeners(Object(Zend \\ Mvc \\ MvcEvent))

#4 /var/www/html/31juegos/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy.php(123): Zend\\EventManager\\Ev in /var/www/html/31juegos/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php on line 494 #4 /var/www/html/31juegos/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy.php(123):/ var / www / html / 31juegos / vendor / zendframework中的 Zend \\ EventManager \\ Ev /zend-view/src/Renderer/PhpRenderer.php494

What am I doing wrong? 我究竟做错了什么? The same code works fine in Zend Framework 2.4. 相同的代码在Zend Framework 2.4中可以正常工作。 I'm using php7.0. 我正在使用php7.0。

When the request is as a regular webpage, then the response is a webpage (not JSON). 当请求是常规网页时,则响应是网页(不是JSON)。 If the request is from AJAX, then the response is JSON (and it does not need a view, which is the error you're getting). 如果请求来自AJAX,则响应为JSON(并且它不需要视图,这是您遇到的错误)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM