Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CakePHP在不同控制器中使用模型_Php_Cakephp - Fatal编程技术网

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

使用CakePHP在不同控制器中使用模型,php,cakephp,Php,Cakephp,我的Cake应用程序中有一些控制器,即服务器和用户。我想编写一个简单的API,并拥有一个名为ApiController的控制器。在这个控制器中,我想同时使用服务器和用户模型 我对蛋糕很陌生,但一般来说不是MVC。从我到目前为止所学的内容来看,Cake将自动使用ServersController控制器中的servers模型,我不知道如何明确使用某个控制器中的模型 另外,我希望API请求只提供JSON而不提供任何HTML标记。我有一个默认布局,它定义了我所有站点页面的页眉/页脚,并且在我从视图请求A

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

我对蛋糕很陌生,但一般来说不是MVC。从我到目前为止所学的内容来看,Cake将自动使用
ServersController
控制器中的
servers
模型,我不知道如何明确使用某个控制器中的模型


另外,我希望API请求只提供JSON而不提供任何HTML标记。我有一个默认布局,它定义了我所有站点页面的页眉/页脚,并且在我从视图请求API函数和JSON时输出。如何停止输出布局,而只为视图提供服务?

您需要在控制器中声明
$uses
属性,请参见

$使用
属性说明控制器可以使用哪些型号:

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

Yottatron的答案恰到好处,Nick Savage的答案也恰到好处。了解加载模型的不同方式之间的差异非常重要,以下评论简要介绍了这一点:


就我个人而言,我避免重载全局
$uses
数组,因为我很少需要全局级别上所有模型对象的引用(根据这里的Cake文档,重载它是一种不好的做法:)

或者,您可以使用$this->loadModel('model');动态加载模型,以防只在代码的某些部分需要它们。然后,你就可以像它们自己的控制器一样与模型进行正常的通信(即$this->Model->doSomething();)。你不是很喜欢蛋糕吗?它加快了我使用过的应用程序的工作进程。当然是我的首选框架。如果您希望
ApisController
仍然能够以正常的
$this->Api
方式使用模型
Api
,则需要将其包含在
$uses
数组中:
public$uses=array('Api',User',Server')
。我同意您的观点,即不需要在AppController中执行
$uses
global操作,而且在控制器中偶尔会说,当您需要访问未关联的模型时。