使用CakePHP在不同控制器中使用模型

时间:2012-07-07 21:03:12

标签: php cakephp

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

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

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

2 个答案:

答案 0 :(得分:14)

您需要在控制器中声明$uses属性,请参阅http://book.cakephp.org/2.0/en/controllers.html#controller-attributes

$uses属性说明控制器可以使用的模型:

<?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

答案 1 :(得分: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