ZF3:如何从动作函数发送 JSON
ZF3: How to send a JSON from an action function
当我想发送 json 对象而不是动作函数的视图时遇到问题。
我已经像这样配置了我的 /config/modules.config.php ...
return [
//...
'view_manager' => [
//...
'strategies' => [
'ViewJsonStrategy',
],
],
];
当我尝试从我的操作函数中 return 一个 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
]);
}
我遇到了这个错误...
Fatal error: Uncaught
Zend\View\Exception\RuntimeException:
Zend\View\Renderer\PhpRenderer::render: Unable to render template
"application/login/login"; resolver could not resolve to a
file in
/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))
#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))
#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
我做错了什么?相同的代码在 Zend Framework 2.4 中运行良好。我正在使用 php7.0.
当请求是一个普通网页时,响应是一个网页(不是 JSON)。
如果请求来自 AJAX,则响应为 JSON(并且它不需要视图,这是您收到的错误)。
当我想发送 json 对象而不是动作函数的视图时遇到问题。
我已经像这样配置了我的 /config/modules.config.php ...
return [
//...
'view_manager' => [
//...
'strategies' => [
'ViewJsonStrategy',
],
],
];
当我尝试从我的操作函数中 return 一个 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
]);
}
我遇到了这个错误...
Fatal error: Uncaught Zend\View\Exception\RuntimeException: Zend\View\Renderer\PhpRenderer::render: Unable to render template "application/login/login"; resolver could not resolve to a file in /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))
#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))
#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
我做错了什么?相同的代码在 Zend Framework 2.4 中运行良好。我正在使用 php7.0.
当请求是一个普通网页时,响应是一个网页(不是 JSON)。 如果请求来自 AJAX,则响应为 JSON(并且它不需要视图,这是您收到的错误)。