2012-01-27 5 views
3

cakephp에서 세 개의 모듈을 별도로 준비해야합니다. 하나는 admin, hotel admin, guest입니다. 이 3 가지는 동일한 로그인 화면을 가진 다른 종류의 사용자이지만 내부 레이아웃은 완전히 분리됩니다.cakephp 응용 프로그램의 여러 모듈

우리는 세 개의 app 폴더와 같이 세 개의 별도의 폴더 구조가 있거나이 컨트롤러에 대해 (here과 같이) 라우팅을 사용해야하므로 컨트롤러가 혼합되어 조작하기 어려울 수 있습니다.

+2

사용 라우팅. 왜 이러한 혼합 컨트롤러는 조작하기 어렵습니까? admin_index(), hotel_admin_index() 및 guest_index()와 같은 작업 목록 만 가질 수 있습니다. – Joep

답변

4

"플러그인"으로 모듈을 만들면 모델, 뷰 및 컨트롤러가 각각 분리됩니다. 플러그인의 기본 경로는 /plugin_name/controller_name/action을 통해 액세스 할 수 있다는 것입니다. 플러그인은 심지어 자신의 레이아웃 등을 가질 수 있습니다. 귀하의 경우 주요 응용 프로그램은 사용자 인증과 사용 권한 확인으로 축소됩니다.

상세 정보 :
1.3 : http://book.cakephp.org/1.3/en/view/1111/Plugins
2.0 : http://book.cakephp.org/2.0/en/plugins.html

나는 세 가지 모듈이 기본적으로 동일한 컨트롤러와 모델을 한 경우에만 라우팅을 사용합니다.

+0

답장을 보내 주셔서 감사합니다. 모든 모듈/플러그인에 대해 동일한 모델을 유지하고 싶다면 – phpian

+0

주 응용 프로그램에서 모델을 정의하고 플러그인에서 사용하십시오. – Joni

1

접두사 라우팅을 복수로 결합하면 layouts이 문제를 해결합니다. 의견에서 Joep이 언급했듯이 컨트롤러의 작업은 간단한 명명 체계 인 admin_index(), hotel_admin_index() and guest_index()을 따르므로 코드를 쉽게 구성 할 수 있습니다.

AppController에서 다음 코드를 사용하여 레이아웃 간 전환 (예 : default.ctp, admin.ctp 및 hotel_admin.ctp)을 처리 할 수 ​​있습니다.

function beforeRender() { 
    if (isset($this->params['prefix']) { 
    if ($this->params['prefix'] == 'admin') { 
     $this->layout = 'admin'; 
    } else if ($this->params['prefix'] == 'hotel_admin') 
     $this->layout = 'hotel_admin'; 
    } 
    } 
} 

당신도 한 단계 더 걸릴 모든 정적 리소스를 분리 할 수 ​​있습니다 (즉, /img/admin/new-blah.png)

관련 문제