2012-07-07 69 views
4

我的Cake应用程序中有一些控制器,即serversusers。我想写一个简单的API,并有一个名为ApiController的控制器。在此控制器内,我想同时使用serversusers型号。在CakePHP的不同控制器中使用模型

我对Cake很新,但一般不是MVC。从我目前选择的Cake到ServersController控制器中将自动使用servers模型,我不知道如何明确地使用某个控制器的模型。

另外,我希望API请求仅在没有任何HTML标记的情况下提供JSON。我有一个默认的布局,它定义了我所有网站页面的页眉/页脚,并且在我请求API函数以及视图中的JSON时输出。我怎样才能停止输出布局,而只是提供视图?

回答

14

您需要声明$uses财产控制器看到http://book.cakephp.org/2.0/en/controllers.html#controller-attributes

$uses属性状态哪种模式(S)的将是提供给控制器:

<?php 
class ApisController extends AppController{ 
    public $uses = array(
     'User', 
     'Server' 
    ); 
} 

你也不会出现要遵循控制器名称为复数(ApisServers)和型号名称为单数(ApiServer)的Cake命名约定。这些名字也应该在CamelCase中。有关更多信息,请参阅http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html

关于JSON,您可以使用Ajax布局来帮助您处理服务器JSON请求。有关如何实现此目的的更多信息,请参阅http://book.cakephp.org/2.0/en/views.html#layouts

+6

或者,您可以使用$ this-> loadModel('Model');在您只需要某些代码部分的情况下即时加载模型。然后,你可以正常地与模型进行通信(即$ this-> Model-> doSomething();),就好像它们是它们自己的控制器一样。 – 2012-07-07 23:07:30

+1

难道你不喜欢蛋糕吗? – 2012-07-07 23:45:12

+0

它大大加快了我用过的应用程序的工作流程。绝对是我的首选框架。 – 2012-07-07 23:49:18

2

Yottatron的答案是现货,正如尼克萨维奇的。重要的是要了解不同方式之间的差异是很重要的加载一个模型,该模型简洁地覆盖在下面的注释:https://stackoverflow.com/a/4753244/117413

就个人而言,我从超载全球$uses阵列望而却步,因为它是非常罕见的,我需要将所有的引用模型对象在全局级别(根据这里的Cake文档,超载它是一种不好的做法:https://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Controllers.html#components-helpers-and-uses

+0

我同意你关于'$ uses'全局不需要在AppController中完成,并且在控制器的奇怪场合中,只有当你需要访问一个没有关联的模型时才会声明。 – 2012-07-08 23:08:13

相关问题