我一直用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文件前的查询中的某些值进行生成?
在开始之前,谢谢你的帮助。
杰罗姆
答案 0 :(得分:0)
您是否在routes.php中添加了路由文件扩展名?
Router::scope('/', function (RouteBuilder $routes) {
$routes->extensions(['json', 'xml']);
// Other code
}
这允许您动态生成JSON和XML文件,如/cakeapp/articles.xml
(如果您希望/cakeapp/articles/index.xml
相同)
答案 1 :(得分:0)
Router::extensions('xml');
从routes.php文件中删除此行。
$routes->extensions(['json', 'xml']);
在routes.php文件中的Router::scope('/', function (RouteBuilder $routes) {
之后添加此行。
现在,只需添加/AppFolder/YourController/genxml.xml
。这应该从您的方法返回数据。 (这一行做$this->set('_serialize', ['video']);
)