CakePHP 3 - 重用控制器逻辑

时间:2018-02-06 16:48:59

标签: controller cakephp-3.0 dry

我之前一直在想这个问题,我将以当前的应用程序为例。

在此应用程序中,我们有用户,应用程序和许多其他模型。通过addeditdelete操作,所有这些模型都会正常修改。关键是这背后的控制器逻辑对于每个模型基本相同。但是,模型名称在各处都是不同的。

问题:对不同型号重复使用标准控制器操作的正确方法是什么?

我知道AppController代码是共享的,所以这将是一个开始的地方。但后来我无法弄清楚如何正确选择模型。

edit页面的核心代码示例如下:

$entity = $model->get($id);
$model->patchEntity($entity, $this->request->getData());
if ($model->save($entity))
    //...
else
    //...

$this->set(compact('entity'));

1 个答案:

答案 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');

编辑: -

  

让我们考虑一下你有两个控制器

     
      
  1. 的ProductsController
      2.CategoriesController - > //两者都扩展了AppController
  2.   

你的 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);
}