Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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的AppController中调用AppModel函数_Php_Cakephp_Cakephp 2.0 - Fatal编程技术网

在cakephp的AppController中调用AppModel函数

在cakephp的AppController中调用AppModel函数,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,我有一个我希望所有控制器都能使用的函数,所以我在AppController中定义了它。现在,这个函数将要做的部分工作与控制器无关,因此它应该在模型中,但由于这是一个通用操作,它在AppModel中似乎才是正确的。我的函数如下所示: class AppController extends Controller { public function i_need_this_everywhere ($term) { // do some stuff // th

我有一个我希望所有控制器都能使用的函数,所以我在AppController中定义了它。现在,这个函数将要做的部分工作与控制器无关,因此它应该在模型中,但由于这是一个通用操作,它在AppModel中似乎才是正确的。我的函数如下所示:

class AppController extends Controller {

    public function i_need_this_everywhere ($term) {
        // do some stuff

        // this is the line that is an issue
        // it seems like this should be simple and work, but no variation of this is working
        $value = $this->App->get_some_cool_data($term);

        return $value;
    }

}
我只是希望能够从AppController调用AppModel函数。我尝试了以下方法:

// I have tried several variations of this.
$this->loadModel('AppModel');
$this->AppModel->get_some_cool_data($term);
但这会导致缺少名为AppModel的数据库表,此时,我尝试在AppModel中设置:

public $useTable = FALSE;

但这让整个应用程序都崩溃了,所以。。。现在我没有主意了。任何帮助都将不胜感激

您的所有模型都应该继承自AppModel,所以为什么不调用
$this->AnyModel->获取一些很酷的数据($term)而不是?AppModel无论如何都应该是一个抽象类——您几乎不想实例化它,只想将其用作基类


另外,这应该是
$useTable=false
$usesTable
。请记住,您的所有模型都应该继承自AppModel,因此您的所有模型最终也不会使用数据库,这可能是您错误的根源。

为我解决这个问题,我不满意的解决方案是将这些函数放在
AppModel
中,然后从任何模型调用它们,如:

$this->WhatEverModelIAmIn->the_general_function_I_need($some_argument);

没错,但诀窍是我试图在AppController中调用AppModel,我想我可以调用
$this->loadModel('SomeModel')$这是AppControl中的->SomeModel->Function()
。但这似乎是一种黑客行为,我并不认为这是一种黑客行为。有时出于某种原因,您必须在AppController中加载不同的模型。尽管如此,如果除此之外您真的不需要在AppController中使用任何模型,您也可以执行
ClassRegistry::init('SomeModel')->function(),它将只在本地加载模型(不会保存为AppController的属性)。我同意witk@Kai。如果您需要在特定控制器中准确而清晰地定义
SomeModel
,您可以将自己的属性添加到
AppController
,并在每个控制器中设置模型名称。使用一些默认模型,这样您就不需要编辑所有的控制器。听起来您想创建一个
model/Universal.php
,但使用了选项kaboom:)。