【发布时间】:2014-09-10 01:55:05
【问题描述】:
我正在评估与 API 一起使用的框架,并且正在认真研究 PHP Phalcon。它看起来很有希望——“精益”(加载你需要的东西),但有很多选择。
我想知道...是否可以不使用视图(而是模板)?我必须设置一个视图,还是只输出.json?
谢谢!
【问题讨论】:
我正在评估与 API 一起使用的框架,并且正在认真研究 PHP Phalcon。它看起来很有希望——“精益”(加载你需要的东西),但有很多选择。
我想知道...是否可以不使用视图(而是模板)?我必须设置一个视图,还是只输出.json?
谢谢!
【问题讨论】:
Phalcon 中有一种方法可以在操作中禁用视图并避免不必要的处理:
public function indexAction() {
$this->view->disable();
$this->response->setContentType('application/json');
echo json_encode($your_data);
}
【讨论】:
disable()调用放到initialize()控制器方法中,因为这个方法is executed first, before any action is executed on a controller:docs.phalconphp.com/en/latest/reference/…
根据您想要做什么,您可以按照其他人的建议禁用视图并回显 json 编码数据,或者您可以使用内置的响应对象,如下所示:
$this->view->setRenderLevel(View::LEVEL_NO_RENDER);
$this->response->setContentType('application/json', 'UTF-8');
$this->response->setJsonContent($data); //where data is an array containing what you want
return $this->response;
文档中还有一个关于构建简单 REST api 的教程
http://docs.phalconphp.com/en/latest/reference/tutorial-rest.html
【讨论】:
如果您根本不使用任何视图,您可以从一开始就禁用视图。
$app = new \Phalcon\Mvc\Application();
$app->useImplicitView(false);
即使你这样做了,我认为你仍然必须设置视图 DI 才能使框架工作。
另外,如果你想输出 json 有一个方法:
$this->response->setJsonContent($dataArray);
$this->response->send();
【讨论】:
是的,你可以做到,我正在使用 PHP Phalcon。 要忽略视图,在您的控制器中,您的操作应该类似于
public function indexAction() {
$var = array or other data
die(json_encode($var));
}
die(); 在控制器中不会渲染任何父布局! :)
【讨论】: