我已成功使用CakePHP中的XML视图文件(请求标头中的XML输出类型,以便CakePHP将使用例如Orders / xml / create.ctp而不是Order / create.ctp)。
但是,现在我需要添加一些功能,这些功能要求我在控制器中的大多数业务逻辑结束时重新格式化XML。
所以我在控制器动作中尝试了这个:
public function createorder() {
$this->autoRender = false; // disable automatic content output
$view = new View($this, false); // setup a new view
{ ... all kinds of controller logic ...}
{ ... usually i would be done here and the XML would be outputted, but the autorender will stop that from happening ... }
{ ... now i want the XML in a string so i can manipulate the xml ... }
$view_output = $view->render('createorder'); // something like this
}
但这给了我的是:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<error>View file &quot;/Users/test/Documents/hosts/mycakeapp/app/View/Orders/createorder.ctp&quot; is missing.</error>
<name>MissingViewException</name>
<code>500</code>
<url>/orders/createorder/</url>
</response>
所以我需要告诉CakePHP拾取xml / createorder.ctp而不是createorder.ctp。我该怎么做呢?
干杯!
答案 0 :(得分:0)
$this->render('/xml/createorder');
答案 1 :(得分:0)
这个答案指的是cakephp 2.4
I have been successfully using XML view files in CakePHP (request the XML output
type in headers so CakePHP will use e.g. Orders/xml/create.ctp
instead of Order/create.ctp).
在lib / Cake / View中,您可以看到不同的View文件,如:
View.php
XmlView.php //This extends View.php
JsonView.php //This extends View.php
所以你告诉cakephp使用XmlView。创建新视图时,需要使用XmlView而不是View。或者,您可以创建自己的自定义视图并将其放在app / View文件夹中。在自定义视图中,您可以设置子目录。
<?php
App::uses('View', 'View');
class CustomView extends View {
public $subDir = 'xml';
public function __construct(Controller $controller = null) {
parent::__construct($controller);
}
public function render($view = null, $layout = null) {
return parent::render($view, $layout);
}
}
因此,您现在需要创建自定义视图$view = new CustomView($this, false);
您还可以在CustomView函数中编写以xml格式处理数据并将其用于每个操作。
@Jelle Keiser的答案也应该有效。 $this->render('/xml/createorder');
指向app/View/xml/createorder
。如果您需要指向app/View/Order/xml/create
,请使用$this->render('/Orders/xml/create');
。