2012-04-18 139 views
0

我遵循this website上的教程,它解释了如何使用cakePHP设置REST,但是当我完成所有这些工作后,当我在浏览器中调用控制器时(例如,我有一个PostsController,它具有默认的CRUD行动),我仍然得到HTML作为我的回应(不是XML)。看起来好像正在调用的视图文件是app/views/posts/index.ctp中的视图文件,而不是我放置在app/views/posts/xml/index.ctp中的视图文件。CakePHP中的REST风格的Web服务

有谁能告诉我我还错过了什么吗?

谢谢

+0

您调用了哪个URL? – Costa 2012-04-19 06:17:18

+0

http:// localhost/my_application/my_controller/my_action – user765368 2012-04-19 14:52:05

+1

我想我会花更少的讽刺海报来度过我的时间。 – Costa 2012-04-19 17:24:11

回答

0

您是否创建了xml布局?您可能需要创建一个空白布局,并在视图中将布局设置为xml布局。

+0

是的,我创建了一个XML布局 – user765368 2012-04-19 14:50:20

0

尝试把这样的事情在你的控制器功能(甚至更好的beforeFiler):

if(@($this->request->isXML() || $this->request->params['ext'] == 'xml')) { 
    $this->RequestHandler->respondAs('xml'); 
} 

另外,还要确保在配置/ routes.php文件是

Router::parseExtensions('xml'); 
+0

不工作! – user765368 2012-04-19 14:51:19

+0

你是否在你的url结尾放了一个.xml文件? – dubvfan87 2012-04-21 20:43:05

3

CakePHP的是什么版本你正在用吗?如果您使用的是2.x版本,解决方案非常简单。

  1. 确保您有这条线在你的控制器

    public $components = array('RequestHandler'); 
    
  2. 进入您的应用程序/配置/ routes.php文件,并与require CAKE . 'Config' . DS . 'routes.php';添加以下行前行:

    Router::mapResources('examples'); 
    Router::parseExtensions('xml'); 
    

    其中的例子基本上就是您的视图名称。

  3. 请务必使用xml扩展名输入您的网址。

    url/controller.xml 
    

这应该做的伎俩。包括RequestHandler组件,当“与Router :: parseExtensions()RequestHandler结合使用时,将自动将布局和视图文件切换为与请求类型匹配的文件”