CakePHP 3 - 重用控制器逻辑

CakePHP 3 - Reusing Controller Logic

之前我也一直在想这个问题,我就以我现在的申请为例

在这个应用程序中,我们有用户、应用程序和许多其他模型。所有这些模型都正常修改,具有 addeditdelete 操作。关键是每个模型背后的控制器逻辑基本相同。不过,型号名称当然各地都不一样。

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

我知道 AppController 代码是共享的,所以这将是一个起点。但是后来我不知道如何正确地进行模型选择。

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

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

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

如果您遵循 CakePHP 的命名约定,请遵循此

在您的 AppController 中:-

$modelName = $this->name;    //This will give you the model name
$model = $this->$modelName;  //Instance of the  model object
$model->find('all');

编辑:-

Let us consider you have two controller

  1. ProductsController
    2.CategoriesController -->//Both extends the 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);
}