2014-01-09 16 views
1

cakePHP로 간단한 웹 응용 프로그램을 만들기 시작했고 작업에서 코드 중복을 피할 수 있는지 궁금합니다. 나는 두 가지 모델을 가지고와 해당 컨트롤러 모두 소폭 다른 코드와 같은 동작 (인덱스,보기, 편집, 추가, 삭제), 예를 들면 포함 :CakePHP : 컨트롤러 동작에서 코드 중복 피하기

트랜잭션 컨트롤러는

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() 조치, 다른 모델에만 적용하십시오 (예 : transactiontrades으로 바꿉니다).

이런 종류의 코드 중복을 피할 수있는 방법이 있습니까?

답변

1

Components은이 특정 목적을위한 것입니다. CakePHP의 책에 따르면

:

구성 요소 컨트롤러간에 공유되는 논리의 패키지입니다. 컨트롤러간에 내용을 복사하여 붙여 넣으려는 경우 구성 요소의 일부 기능을 래핑하는 것이 좋습니다.

상세 정보 : "Creating a Component"

기타 :

당신은 또한 CRUD Plugin by Friends Of Cake 볼 수 있습니다.

+0

매우 사실 ... 그에게 맡기십시오 ... – Anubhav

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(); 
    } 
} 

나는 일반적으로하지만 이런 종류의 일을하지 않는다 : 나는 순간에 생각할 수있는 하나는 컨트롤러가 같은, 상속 컨트롤러를 작성하는 것입니다. 별다른 성과를 내지 못하게 가독성을 떨어 뜨릴 수도 있고, 개발 과정에 관여 할 때마다 컨트롤러가 갈라지기 시작할 수도 있습니다.

관련 문제