【发布时间】:2016-05-19 10:33:28
【问题描述】:
有没有办法在 AppController 中不可知地获取/操作模型,以避免应用程序控制器中的 DRYness ?例如:
//AppController.php
public function find_all()
{
return $this->AppModel->find('all');
//I know this does not work but to give you the idea
}
在应用的子控制器中:
//FoosController.php
public function some_function()
{
$data = parent::find_all();
//List of Foo entities
}
或者:
//BarsController.php
public function some_other_function()
{
$data = parent::find_all();
//List of Bar entities
}
CakePHP 有没有可以提供的解决方案?或者使用反射,也许?
感谢您的帮助!
【问题讨论】:
-
您确定要避免干燥,我认为您想要实现它吗?你不想重复的究竟是什么?它真的只是调用
Model::find(),还是实际上涉及更多复杂性?如果是后者,请详细说明,因为包装一个简单的Model::find()调用没有太大意义。 -
事实上,它确实不仅仅是 Model:find() 方法...基本上我在模型上执行的所有 CRUD 操作都是完全一样的,这就是为什么我想直接在 AppController 中重构它们。所以我真正想要实现的是以抽象的方式操作模型。使用 Controller:loadModel($this->modelClass) 加载正确的模型,但是,我怎样才能使用这个模型来调用 Model:save() 或 Model:find() 方法?
-
嗯,我仍然不确定我是否理解您的实际问题...您可能会问如何使用
$this->modelClass的值来访问对象属性? -
我终于找到了实现我想做的方法:
$this->{$this->modelClass}->find('all');
标签: php cakephp activerecord abstraction cakephp-2.7