2011-04-26 39 views
0

我在尝试“抓取”蛋糕php中的elmenet的呈现html时遇到了一些麻烦。将呈现的元素存储在CakePHP中的变量中

说我有命名的元素“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

检查autoRender变量值 – binoy 2011-04-26 13:49:28

回答

1

你的意思呢?

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

可以在该方法的控制器操作中调用? – 2011-04-26 13:47:58

+0

不,元素不应该从控制器呈现。你能澄清你想要做什么吗? – deceze 2011-04-26 13:49:44

+0

@deceze我已经更新了这个问题来更好地解释我想达到的目标。 – 2011-04-26 13:57:32

2

暂时忘记元素。

首先你要分开,其中包括来自控制器输出的东西的一切(无论它是HTML或JSON或其他)。

对于你必须有一个相应的视图每个控制器动作。所以,对于控制器动作jsonAction你应该有一个视图名称json_action.ctp(在相应的文件夹,例如,如果jsonActionMessagesController创建一个文件夹命名为/view/messages/json_action.ctp)。

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

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

相关问题