CakePHP 2.x不产生json响应

时间:2017-11-10 14:27:24

标签: php json cakephp cakephp-2.0

我有一个Cake 2.x应用程序。我需要提供一个来自PHP数组的JSON编码响应,但它没有按预期工作。

app/Config/routes.php我有Router::parseExtensions('json');

在我的控制器中,我有这段代码:

public function ajaxTags()
{
    $this->loadModel('Tag');
    $tags = $this->Tag->find('list');
    var_dump($tags);
    die;
}

这产生了我所期望的 - 我的'tags'数据库表中的PHP数据数组,例如

array(4) { 
    [1]=> string(14) "United Kingdom"
    [2]=> string(6) "France"
    [3]=> string(7) ... 
}

所以我想做的就是将其作为JSON编码数据。我已按照https://book.cakephp.org/2.0/en/views/json-and-xml-views.html

上的说明操作了

所以在TagsController.php的顶部我有:

public $components = array('RequestHandler');

然后我尝试使用文档中所述的_serialize输出它。我不需要观看""为此,因为我不想做任何其他格式化:

public function ajaxTags()
{
    $this->loadModel('Tag');
    $tags = $this->Tag->find('list');
    $this->set('_serialize', array($tags));
}

这给出了以下回应:

null

响应数据编码为Content-Type:application/json; charset=UTF-8(我可以在浏览器的“网络”标签中看到此信息)。

我哪里错了?我知道$tags中有数据,因为我var_dump早些时候。为什么现在给出一个空输出?

1 个答案:

答案 0 :(得分:2)

根据documentation,您的操作应该是这样的:

public function ajaxTags()
{
    $this->loadModel('Tag');
    $tags = $this->Tag->find('list');
    $this->set('tags', $tags);
    $this->set('_serialize', array('tags'));
}
  

_serialize键是一个特殊的视图变量,用于指示哪个   使用数据视图时,应该序列化其他视图变量。

您需要将变量$tags发送到视图,以便_serialize键知道它并将呈现它。