我刚开始使用cakePHP创建一个简单的Web应用程序,并且想知道我是否可以避免代码重复。我有两个模型,相应的控制器都包含相同的操作(索引,视图,添加,编辑,删除),代码略有不同,例如:
交易控制器
public function add() {
if ($this->request->is('post')) {
$this->Transaction->create();
if ($this->Transaction->save($this->request->data)) {
$this->Session->setFlash(__('The transaction has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The transaction could not be saved. Please, try again.'));
}
}
}
第二个控制器将采用相同的add()
操作,仅针对不同的模型(例如,将transaction
替换为trades
)。
那么有没有办法避免这种代码重复?
答案 0 :(得分:2)
答案 1 :(得分:0)
可能有多种方法可以避免重复。我现在能想到的是编写一个控制器继承自的控制器,如:
class BaseController extends AppController {
protected $modelName = '';
/*Make sure all methods in this model are protected, so users
can't navigate to them */
protected function add() {
if($this->request->is('post')) {
$this->{$this->$modelName}->create();
//etc....
}
}
class TransactionController extends BaseController {
public function __construct ( $request = null , $response = null ) {
$this->modelName = 'Transaction';
parent::__construct($request, $response);
}
public function add() {
parent::add();
}
}
我通常不会做这种事情。您可能最终会降低可读性,因为您无法获得更多回报,或者您可能会发现随着您进一步深入开发,您的控制器将开始出现分歧。