CakePHP 3 - 重用控制器逻辑
CakePHP 3 - Reusing Controller Logic
之前我也一直在想这个问题,我就以我现在的申请为例
在这个应用程序中,我们有用户、应用程序和许多其他模型。所有这些模型都正常修改,具有 add
、edit
和 delete
操作。关键是每个模型背后的控制器逻辑基本相同。不过,型号名称当然各地都不一样。
问题:为不同模型重用标准控制器操作的正确方法是什么?
我知道 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
- 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);
}
之前我也一直在想这个问题,我就以我现在的申请为例
在这个应用程序中,我们有用户、应用程序和许多其他模型。所有这些模型都正常修改,具有 add
、edit
和 delete
操作。关键是每个模型背后的控制器逻辑基本相同。不过,型号名称当然各地都不一样。
问题:为不同模型重用标准控制器操作的正确方法是什么?
我知道 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
- 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);
}