如何渲染元素并将其传递给CakePHP中的json数据视图

时间:2013-07-09 08:39:52

标签: php json cakephp

我目前正在将我最新的应用程序之一升级到cakePHP 2.3,它包含许多JavaScript / AJAX内容。

我有以下代码:

function do_stuff() {
  $html_content = $this->render('/elements/my_element');
  $status = 'success';

  $this->set('html_content', $html_content);
  $this->set('status', $status);

  $this->set('_serialize', array('html_content', 'status'));
}

我通过AJAX用https://mydomain.tld/controller/do_stuff.json

调用该函数

当然,我希望收到一个带有{'html_content':'...','status':'success'}的JSON对象,

但我只收到html_content。我想,这是由于$ this-> render()调用。

有人提出这个问题的提示/解决方案吗?

2 个答案:

答案 0 :(得分:3)

我不知道它是黑客还是好代码。但这在运行CakePHP 2.3时非常好用

function do_stuff() {

  // modified below two lines
  $this->View = $this->_getViewObject();
  $html_content = $this->View->render('/Elements/main_menu');

  $status = 'success';

  $this->set('html_content', $html_content);
  $this->set('status', $status);

  $this->set('_serialize', array('html_content', 'status'));
}

答案 1 :(得分:1)

如果要在其他位置(EventListener,Model,Controller ...)渲染视图,可以执行以下操作:

$View = new View();
$html_content = $View->element('/Elements/main_menu', array(
    'foo'=>'bar'
));

然后,您可以序列化您的html内容。