我会以最可重用的方式开发我的 CakePHP 应用程序。我想把它当作网络服务,所以我不想严格绑定控制器和视图。我的想法是:控制器只返回 json 信息,视图调用控制器并获取 json 并进行 html 输出。
我怎么能意识到这一点?可能是一个很好的方法,开发页面而不是视图,并且在页面内部调用之前开发的 web 服务。
我会以最可重用的方式开发我的 CakePHP 应用程序。我想把它当作网络服务,所以我不想严格绑定控制器和视图。我的想法是:控制器只返回 json 信息,视图调用控制器并获取 json 并进行 html 输出。
我怎么能意识到这一点?可能是一个很好的方法,开发页面而不是视图,并且在页面内部调用之前开发的 web 服务。
你甚至可以忘记创建视图文件,使用 $this->set('_serialize', array('people')); 在你的 PeopleController::show()
好吧,蛋糕有点像这样“开箱即用”的作品。您可以使用它Router::parseExtensions();
来定义您想要提供的数据类型。例如在app/Config/routes.php
:
Router::parseExtensions('xml','json');
这将使检测传入的请求类型成为可能。例如,如果有人请求:
www.example.com/people/list.json
或www.example.com/people/list.xml
,在您的 PeopleController 的 list() 方法中,您将能够检测到正在请求的资源类型 - json 或 xml,当然还有您定义的任何其他扩展。这就是RequestHandlerComponent的用途。您可以检查它是否是 xml,例如:
if($this->RequestHandler->isXml()) {
//Some code
}
不同的扩展只是数据的不同表示,所以你提供的究竟是什么并不重要。从 v2.1 开始,Cake 会在看到 JSON 或 XML 请求时自动切换视图类,这会将我们带到新的JSON 和 XML 视图。
您所要做的就是在适当的位置提供视图。
在View/People
(对于此示例)中,您将拥有:
..View/People/
list.ctp
xml/
list.ctp - XML view
json/
list.ctp - JSON view