0

我正在使用 CakePHP 2.0(我相信它是 v2.0.3。)和 PHP 5.3.8。

我正在开发一个利用 Cake 对 url 扩展的支持的应用程序。具体来说,只要 url 请求以 .xml 扩展名结尾,我就会输出 XML。如果 url 请求没有任何扩展名,那么我的应用程序会显示标准视图。这一切都很好 -

request .../controller/action.xml renders via view/controller/xml/action.ctp while request .../controller/action renders via view/controller/action.ctp.

为了实现这一点,我做了以下事情:

1. Added support for url extension; added the following line to route.php -- Router::parseExtensions('xml');
2. Added support request handling; added the following line to MyController.php -- public $components = array('Session', 'RequestHandler');

为了输出 xml,我将 Cake 的“XML”类与 PHP 的“SimpleXMLElement”类结合使用。我的问题是永远不会生成完整的 xml。假设这些类基于输入 PHP 数组生成 xml,但是,似乎未处理完整的数组。我的 xml 输出是部分的。

我的视图文件(.ctp)中的源代码如下:

$simple_xml_elem = Xml::build($xml_array); 回声 $simple_xml_elem->asXML();

有趣的是,在尝试调试此问题的过程中,我发现如果我简单地尝试将视图对象转储到 xml 视图文件 (../view/controller/xml/action.ctp) 中,可以观察到类似的行为。'var_dump($this)' 仅输出视图的部分转储。在标准视图文件 (../view/controller/action.ctp) 中执行的相同视图转储输出视图的完整转储。

我相信 Cake 在路由 url 扩展时会以某种方式设置视图环境,而不是请求标准视图时。

在我脱发之前,请有人为我解释一下。请????谢谢!

4

1 回答 1

0

你看过响应和请求对象吗

http://mark-story.com/posts/view/the-cakerequest-object-in-cakephp-2-0 - 我认为这篇文章是在 cake 2 是 alpha 时写的,但 Mark 谈到了请求对象的概念(另一个响应条目)

两个对象都传递给控制器 ​​ http://book.cakephp.org/2.0/en/controllers/request-response.html

现在我相信你使用 request comp 来处理布局切换(虽然它可以在没有它的情况下完成)

于 2011-12-18T01:08:15.857 回答