2011-02-16 5 views
6

모델이나 컨트롤러에서 메일을 보내야 할 때마다 문제가 발생합니다. 문제는 컨트롤러에서 사용하는 것과 같습니다.MVC PHP - 모델에서 메일 보내기

이것은 PHP와 관련이 있습니다. 컨트롤러에서

: 모델에서

if (Post::get()){ 
    $this->model->registerUser(...); 
    $this->model->mailSendUserActivation(); 
    // assign something to view. 
} 

:

public function mailSendUserActivation(){ 
    $mail = new \com\Mail(); 
    // assign stuff to mail from API classes and other functions in model. 
    $mail->send(); 
} 

이 맞습니까? 아니면 메일이 실제로 컨트롤러에서 전송되어야합니까?

답변

3

컨트롤러에서 메일을 보내고/필요하면 모델에서 데이터/etc를 읽어야합니다.

10

모델은 도메인 모델을 설명해야합니다.
컨트롤러은 사용자와의 상호 작용을 처리해야합니다.
메일 보내기는 컨트롤러에서 처리해야하는 작업입니다.
이메일을 보내는 데 복잡한 코드가 필요한 경우 (몇 줄 이상을 말하십시오) 컨트롤러를 일부 도우미 클래스로 추출하여 컨트롤러를 슬림하고 응집력있게 유지하십시오. 그래서 나는 헬퍼 클래스 메소드에서 이메일을 보내기위한 코드를 넣을 것이고 컨트롤러 액션으로 호출 할 것이다.

좋은 설명 MVC on wikipedia

+2

또한 가능한 경우보기 레이어에서 메일 본문을 렌더링하는 것을 고려하십시오. 일부 MVC는 이것을 매우 쉽게 만들어 주며, 프레젠테이션을 속하는 위치에 놓습니다. 이는 종종 장점을 제공합니다. 시스템의 뷰 레이어에 웹 페이지 용 HTML 렌더링을위한 편리한 기능이 많이 있다면 HTML 전자 메일도 매우 쉽게 렌더링 할 수 있습니다. –

+0

+1 @Matt. 좋은 지적 –