将呈现的元素存储在CakePHP中的变量中

时间:2011-04-26 13:34:39

标签: php cakephp

我在尝试“捕捉”蛋糕php中elmenet的渲染html时遇到了一些麻烦。

假设我有一个名为“message.ctp”的元素

我想做以下事情:

对控制器中的操作发出$ .getJSON请求说jsonAction()。在此操作中,我将执行一些数据库更新并返回一个json字符串。我想存储html是json对象的一部分。可行?

function jsonAction() {
    //Do DB update
    if(db update was ok) {
        $response = array("completed" => true, "html" => $this->render("message"));
    } else {
       $response = array("completed" => false);
    }
    echo json_encode($response);
}

现在似乎正在发生的事情是渲染方法回显渲染值而不是返回它。

无论如何我能做到这一点吗?

由于

此致 加布里埃尔

2 个答案:

答案 0 :(得分:2)

暂时忘记元素。

首先,您必须将包含从控制器输出内容的所有内容分开(无论是HTML还是JSON还是其他内容)。

对于每个控制器操作,您必须具有相应的视图。因此,对于控制器操作jsonAction,您应该有一个视图名称json_action.ctp(在相应的文件夹中,例如,如果jsonAction位于MessagesController,则创建一个名为/view/messages/json_action.ctp的文件夹)。

从控制器设置变量,在视图中显示它并完成。不要忘记来自控制器的$this->layout = 'empty',以便只显示视图中的内容。

一般来说,你应该重做CakePHP教程并重新阅读它的书,以便更好地理解MVC(模型 - 视图 - 控制器)模式和CakePHP结构。

答案 1 :(得分:1)

你是说这个吗?

$myRenderedHtml = $this->element('message');
                         ^^^^^^^