我有一个函数,我希望我的所有控制器都能使用它,所以我在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;
但是那把整个应用程序都炸飞了,所以...现在我没主意了。任何帮助都将不胜感激。
3条答案
按热度按时间ss2ws0br1#
所有的模型都应该继承自AppModel,那么为什么不调用
$this->AnyModel->get_some_cool_data($term);
呢?AppModel应该是一个抽象类--你几乎不需要示例化它,你只需要把它作为一个基类。同样,它应该是
$useTable = false;
而不是$usesTable
。再次记住,所有模型都应该继承自AppModel,因此所有模型最终也不会使用数据库,这可能是错误的根源。0pizxfdo2#
为了解决这个问题,一个有效但我不满意的解决方案是将这些函数放在
AppModel
中,然后从任何模型中调用它们,如下所示:dffbzjpn3#
如果你想使用AppController中的一个方法调用AppModel中的一个方法,使用属于被调用的控制器类的特定模型类,那么我相信(我可能是错的)你应该这样做:
$this-〉modelClass是属于继承AppController的控制器的模型的类,因此它将调用AppModel作为当时它应该是的模型。