我正在使用 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 扩展时会以某种方式设置视图环境,而不是请求标准视图时。
在我脱发之前,请有人为我解释一下。请????谢谢!