正在为cakephp调用AppController中的AppModel函数

sxissh06  于 2022-11-11  发布在  PHP
关注(0)|答案(3)|浏览(157)

我有一个函数,我希望我的所有控制器都能使用它,所以我在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;

但是那把整个应用程序都炸飞了,所以...现在我没主意了。任何帮助都将不胜感激。

ss2ws0br

ss2ws0br1#

所有的模型都应该继承自AppModel,那么为什么不调用$this->AnyModel->get_some_cool_data($term);呢?AppModel应该是一个抽象类--你几乎不需要示例化它,你只需要把它作为一个基类。
同样,它应该是$useTable = false;而不是$usesTable。再次记住,所有模型都应该继承自AppModel,因此所有模型最终也不会使用数据库,这可能是错误的根源。

0pizxfdo

0pizxfdo2#

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

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

dffbzjpn3#

如果你想使用AppController中的一个方法调用AppModel中的一个方法,使用属于被调用的控制器类的特定模型类,那么我相信(我可能是错的)你应该这样做:

class AppController extends Controller {
    public function foo() {
        $this->{$this->modelClass}->bar();
    }
}

$this-〉modelClass是属于继承AppController的控制器的模型的类,因此它将调用AppModel作为当时它应该是的模型。

相关问题