我在尝试“捕捉”蛋糕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);
}
现在似乎正在发生的事情是渲染方法回显渲染值而不是返回它。
无论如何我能做到这一点吗?
由于
此致 加布里埃尔
答案 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');
^^^^^^^