所以这是我的问题:
我在数据库中提取数据,并希望在jSON format
中提供这些数据。
我的controller
如下:
public function testAction()
{
$articles = Article::find();
if (count($articles) > 0) {
$final_array = array();
foreach ($articles as $article) {
$user = Users::find("id = " . $article->getUsersId());
$current = array('id' => $article->getId(),
'name' => $article->getName(),
'replies' => $article->getReplies(),
'date' => $article->getDate(),
'illustration' => $article->getIllustration(),
'content' => $article->getContent(),
'link' => $article->getLink(),
'user_id' => $article->getUsersId(),
'user_name' => $user[0]->getPseudo());
$final_array[] = $current;
}
$result = array('status' => 1,
'message' => 'article have been downloaded',
'response' => $final_array);
} else {
$result = array('status' => 1,
'message' => 'no article in the stack');
}
$this->view->disable();
$this->response->setContentType('application/json', 'UTF-8');
echo json_encode($result);
}
显示的视图提供nothing
:
<html>
<head></head>
<body></body>
</html>
麻烦不是来自我的模型或SQL请求,因为如果我var_dump
我的结果而是改变我的控制器:
[...]
//$this->view->disable();
//$this->response->setContentType('application/json', 'UTF-8');
var_dump($result);
[...]
它为我提供了以下内容(长度不一直匹配,因为我自愿更改了在这种情况下不感兴趣的内容):
array (size=3)
'status' => int 1
'message' => string 'article have been downloaded' (length=28)
'response' =>
array (size=1)
0 =>
array (size=9)
'id' => string '1' (length=1)
'name' => string 'Champion de CAPU' (length=16)
'replies' => string '0' (length=1)
'date' => string '2014-06-10 06:22:35' (length=19)
'illustration' => string 'illustration_link' (length=69)
'content' => string 'content_text' (length=182)
'link' => string 'more_link' (length=50)
'user_id' => string '6' (length=1)
'user_name' => string 'bathiatus' (length=9)
这就是我想要的......
此外,我实际上在另一个controller
中做了同样的事情,以便为所有用户提供(UserController
,jGetAllUsersAction
)并且它运行良好(代码是相同的除外数据库中的表是不同的。)
答案 0 :(得分:2)
我终于找到了问题。
感谢您的回答,我发现所有用于显示视图的方式都有效(包括我在我的问题中的目的)。
我真的不知道哪种方式最好,但我想我的问题不是。
顺便说一句,问题是我试图注入special characters
(例如é
,è
,à
,ë
,... 。)在我的Json object
。实际上,我的内容是法语。
Json对象不支持这些字符,而使用var_dump
打印时不会出现问题。
答案 1 :(得分:1)
如果您只想要一个json响应,可以在控制器中执行此操作:
返回$ this-&gt; response-&gt; setJsonContent($ result);
Phalcon禁用视图并自动设置正确的内容类型。 json_encode也已完成,所以只需输入$ result。
答案 2 :(得分:0)
默认情况下,Phalcon需要一个视图来返回响应(在您的情况下是JSON)。
控制器代码:
$this->response->setContentType('application/json', 'UTF-8');
$this->view->setVar("some_var", $result);
然后你必须创建一个与控制器名称和功能相对应的视图 放在那里:
<?php echo json_encode($some_var); ?>
如果您不想创建其他视图,请使用此链接以获取更多参考:
http://docs.phalconphp.com/en/latest/reference/response.html