我之前一直在想这个问题,我将以当前的应用程序为例。
在此应用程序中,我们有用户,应用程序和许多其他模型。通过add
,edit
和delete
操作,所有这些模型都会正常修改。关键是这背后的控制器逻辑对于每个模型基本相同。但是,模型名称在各处都是不同的。
问题:对不同型号重复使用标准控制器操作的正确方法是什么?
我知道AppController
代码是共享的,所以这将是一个开始的地方。但后来我无法弄清楚如何正确选择模型。
edit
页面的核心代码示例如下:
$entity = $model->get($id);
$model->patchEntity($entity, $this->request->getData());
if ($model->save($entity))
//...
else
//...
$this->set(compact('entity'));
答案 0 :(得分:1)
如果您遵循CakePHP的命名约定,请遵循此
在AppController中: -
$modelName = $this->name; //This will give you the model name
$model = $this->$modelName; //Instance of the model object
$model->find('all');
编辑: -
让我们考虑一下你有两个控制器
- 的ProductsController
醇>
2.CategoriesController - > //两者都扩展了AppController
你的 add()对于控制器来说都是一样的 然后在你的ProductsController和CategoriesController
中public function add(){
parent::add(); //this will call to the add() of AppController
}
然后在AppController中
public function add(){
$modelName = $this->name; //This will give you the model name
$modelObject = $this->$modelName;
$entity = $this->$modelObject->newEntity($this->request->data, ['validate' => false]);
$this->$modelObject->save($entity);
}