我正在开发一个CakePHP项目,我意识到我的很多控制器都有相同的代码。我决定尝试制作一种" BaseController"让其他控制器扩展......就像这样:
class BaseController extends AppController {
public $components = array(
'RequestHandler'
);
public function get($param = "all", $value = "") {
$this->layout = 'ajax';
if($param == "all") {
$data = $this->Base->find('all');
} elseif ($param == "id") {
$data = $this->Base->findById($value);
} else {
...
}
}
...
}
但此时我迷路了。我不想拥有一个Base数据库表和模型......我只想要一些东西,这样就不必多次写出几乎相同的get()
方法了。 ..并且让我说我制作一个控制器" FooController"这扩展了这个控制器......我该怎么做才能让get()
现在与Foo模型/表交互?
我认为有一种方法可以做到这一点,而不是有大量的重复代码...但我还没有找到它。
答案 0 :(得分:1)
$data = $this->{$this->modelClass}->find('all');
应该抓住http://api.cakephp.org/2.4/source-class-Controller.html#268-276。
答案 1 :(得分:0)
假设您想要用Foo模型替换Base
,我个人会将模型名称作为参数传递:
public function get($param = 'all', $value = '', $model = 'Foo')
{
$this->layout = 'ajax';
if($param == 'all') {
$data = $this->{$model}->find('all');
} elseif ($param == 'id') {
$data = $this->{$model}->findById($value);
}
}
不熟悉蛋糕以提供更好的解决方案,在调用查找之前对模型存在进行一些检查可能不会受到伤害。
如果按照CakePHP方法解决这个问题,请原谅。