2009-05-27 10 views

답변

0

궁극적으로 나는 데이터를 다른 컨트롤러로 이동하려고 시도하는 것이 바보 같다고 결정했습니다. 모든 컨트롤러의 요청을 처리하는 지불 구성 요소를 만들었습니다.

4

지불을위한 실제 로직을 지불 또는 송장 모델에 넣는 것이 좋습니다. 이 작업을 수행하면 $ this-> Customer-> Payment-> process_charge (..) 호출을 할 수 있도록 두 모델을 연결할 수도 있고 Customers 컨트롤러에서 $ uses 속성을 정의하여 지불 모델.

나는 또한이 상황 때문에 부분적으로는 "뚱뚱한 모델, 스키니 컨트롤러"학교의 제안자이기도합니다. 나는 컨트롤러가 실제 HTTP 요청 (액세스 제어, 워크 플로우 속성 등)을 담당하고 있고 모델이 대부분 무거운 작업을 수행하도록 생각하려고합니다.

1

사용자 컨트롤러의 등록 작업에서 사용자가 등록 (및 로그인) 될 때 일반 지불 모델을 사용하고 거기에 자체 게시물을 볼 수있는 지불 컨트롤러로 리디렉션하는 것이 좋습니다. 리디렉션을 통해 한 동작의 끝에서 다른 동작의 끝까지 통신하는 방법은 URL을 작성하는 것입니다. 지급 컨트롤러가 필요한 경우 즉, 사용자의 ID를 잡을 수 있어야하기 때문에 당신은, 그러나 사용자 정보를 전달할 필요가 없습니다 :

$this->data['Payment']['user_id'] = $this->Auth->user('id'); 
$this->Payment->create($this->data); 
if ($this->Payment->save()) { 
// etc 
0

가정 고객 및 지불은 어떤 방식으로 관련되어, 이유는 없다 cusomters_controller에 지불 정보를 기록 할 수 없습니다.

$this->Customer->Payment->create()... 

각 모델마다 하나의 컨트롤러를 사용해야한다는 규칙은 없습니다. 사실, 현재 경험하고있는 대다수의 실제 응용 프로그램에서는 작동하지 않습니다.

저는 보통 컨트롤러를 모델과 페어링하지 않고 논리 기능 그룹별로 분리합니다. 귀하의 경우, 나는 accounts_controller (계정 테이블이 없다고하더라도)를 만들고 해당 컨트롤러에 로그인, 등록, 로그 아웃, 프로필 편집 등을 할 것입니다.

조직의 이러한 종류의 응용 프로그램을 유지하기 쉽게 만들고 최종 사용자를위한 더 많은 논리적 경로를 만듭니다.

관련 문제