我不知道该怎么做:
我有一个CakePHP项目,它使用AdministratorsController
和UsersController
来表示不同的角色等等。但是,用户也可以保存一条消息和一个管理员!那么,我应该重复相同的功能还是什么?
function saveMessage(){
$this->autoRender = false;
if (!$this->RequestHandler->isPost())
$this->Session->setFlash('Error 78.', 'flash_custom_danger');
else{
if(!$this->Message->save($this->request->data))
$this->Session->setFlash('Error 985.', 'flash_custom_success');
else
$this->Session->setFlash('Success!', 'flash_custom_success');
}
$this->redirect('/');
}
答案 0 :(得分:1)
将函数移动到app_controller,因为两个控制器都将从它扩展。
在app_controller中:
function my_function($controller_specific_string = null){
//stuff here common to both controllers
}
在控制器中:
function my_function() { //extended function in both controllers
// do controller specific stuff here...
return parent::my_function('from_users_controller');
}
答案 1 :(得分:1)
好的,只是针对这种情况(通常我建议将功能放在模型或AppController中)我只是创建一个父类。
我们称之为GeneralUsers
(想象力迟到)
class GeneralUsersController extends AppController {
protected function _saveMessage(){
$this->autoRender = false;
if (!$this->RequestHandler->isPost())
$this->Session->setFlash('Error 78.', 'flash_custom_danger');
else{
if(!$this->Message->save($this->request->data))
$this->Session->setFlash('Error 985.', 'flash_custom_success');
else
$this->Session->setFlash('Success!', 'flash_custom_success');
}
$this->redirect('/');
}
}
让我们UsersController
和AdministratorsController
延伸到那个
class UsersController extends GeneralUsersController {
public function myAction() {
$this->_saveMessage();
}
}
// and the Administrator controller one
这样,具有这些功能的唯一控制器就是用户和管理员。
现在,如果在保存之前进行了大量验证,并且您希望避免重复这些验证,我会说将其放在模型中。如果每个控制器都应该有权访问该函数,那么将它放在AppController中。但由于“管理员”是具有更多权限的“用户”(并且您没有使用“admin_”前缀分隔该功能),因此请使用额外的父类。但请注意这些功能,除非您希望这些功能可以通过网址访问,否则不要让它们为public
。