我一直用CakePHP 2.5编程。现在我切换到3.2版本,遇到了一个无法解决的问题。
目标是视频播放器所需的动态XML文件
在版本2.5中,我可以在控制器中使用以下行来完成此操作
public function genxml($id = null) {
if (!$this->Video->exists($id)) {
throw new NotFoundException(__('Invalid video'));
}
$this->RequestHandler->respondAs('xml');
$this->RequestHandler->renderAs($this, 'xml');
$options = array('conditions' => array('Video.' . $this->Video->primaryKey => $id));
$this->set('video', $this->Video->find('first', $options));
}
不幸的是,这在版本中不起作用。3.在这里,我使用了以下几句话,但我并没有达到我所达到的结果。
public function genxml($id = null) {
$this->RequestHandler->respondAs('xml');
$this->RequestHandler->renderAs($this, 'xml');
$video = $this->Videos->get($id);
$this->set('video', $video);
$this->set('_serialize', ['video']);
}
我应该对某些价值观做些什么在预XML文件中,查询是否生成为XML文件?
在开始之前感谢您的帮助。
Jerome
您是否在routes.php中添加了路由文件扩展名?
Router::scope('/', function (RouteBuilder $routes) {
$routes->extensions(['json', 'xml']);
// Other code
}
这允许您像/cakeapp/articles.xml
一样动态生成JSON和XML文件(如果您希望/cakeapp/articles/index.xml
相同)
Router::extensions('xml');
从routes.php文件中删除此行。
$routes->extensions(['json', 'xml']);
在routes.php文件中的Router::scope('/', function (RouteBuilder $routes) {
之后添加此行。
现在,只需输入/AppFolder/YourController/genxml.xml
。这应该会从您的方法返回数据。(该行执行$this->set('_serialize', ['video']);
)