Phalcon:json_encode(array())什么都不返回

时间:2014-06-10 04:10:56

标签: php json phalcon

所以这是我的问题:

我在数据库中提取数据,并希望在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中做了同样的事情,以便为所有用户提供(UserControllerjGetAllUsersAction)并且它运行良好(代码是相同的除外数据库中的表是不同的。)

3 个答案:

答案 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