phalcon对控制器返回值的使用以输出json
程序员文章站
2022-03-03 14:48:24
...
在phalcon里,控制器的Action的方法的返回值没啥用。
通过事件管理器,让返回值起作用。
例如
上面这个代码,打开页面没有输出。
而我现在希望,能和laravel 一样,返回数组的话,能自动输出json格式。
利用phalcond的事件管理器,轻松实现此要求,代码如下:
$di->setShared('dispatcher', function()use($di) {
$dispatcher = new Dispatcher();
$dispatcher->setDefaultNamespace('Learn_phalcon\Modules\Frontend\Controllers');
$eventManager = new EventsManager();
$eventManager->attach('dispatch:afterDispatch' ,function (Event $event, $dispatcher)use($di) {
$arr = $dispatcher->getReturnedValue();// 获取action的返回
if (is_array($arr)) { // 判断是否是数组,
$response = $di->getResponse();
$response->setHeader('Content-Type', 'application/json');
$response->setContent(json_encode($arr, JSON_UNESCAPED_UNICODE));
$response->send();
}
});
$dispatcher->setEventsManager($eventManager);
return $dispatcher;
});
让phalcon再次wei大!
通过事件管理器,让返回值起作用。
例如
public function indexAction() { $this->view->disable(); return ['aa'=>1, 'status'=> 0 ]; }
上面这个代码,打开页面没有输出。
而我现在希望,能和laravel 一样,返回数组的话,能自动输出json格式。
利用phalcond的事件管理器,轻松实现此要求,代码如下:
$di->setShared('dispatcher', function()use($di) {
$dispatcher = new Dispatcher();
$dispatcher->setDefaultNamespace('Learn_phalcon\Modules\Frontend\Controllers');
$eventManager = new EventsManager();
$eventManager->attach('dispatch:afterDispatch' ,function (Event $event, $dispatcher)use($di) {
$arr = $dispatcher->getReturnedValue();// 获取action的返回
if (is_array($arr)) { // 判断是否是数组,
$response = $di->getResponse();
$response->setHeader('Content-Type', 'application/json');
$response->setContent(json_encode($arr, JSON_UNESCAPED_UNICODE));
$response->send();
}
});
$dispatcher->setEventsManager($eventManager);
return $dispatcher;
});
让phalcon再次wei大!