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

Это правильно ? Или почта действительно должна быть отправлена ​​​​из контроллера?


person Jonatan    schedule 16.02.2011    source источник


Ответы (3)


Модель должна описывать вашу модель домена.
Контроллер должен обрабатывать взаимодействие с пользователем.
Отправка почты — это действие, поэтому вы должны обрабатывать его в контроллере.
Если для отправки электронной почты требуется сложный код (скажем, более нескольких строк), подумайте о том, чтобы извлечь его в какой-нибудь вспомогательный класс, чтобы ваш контроллер оставался тонким и целостным. Поэтому я бы поместил код для отправки электронной почты в какой-нибудь метод вспомогательного класса и просто вызвал бы его в действии контроллера.

Хорошее объяснение MVC в Википедии

person Mr. L    schedule 16.02.2011
comment
Кроме того, рассмотрите возможность рендеринга тела письма в слое просмотра, если это возможно. Некоторые MVC делают это очень просто, и это делает презентацию там, где она должна быть. Это часто дает преимущества, например. если слой просмотра в вашей системе имеет множество удобных средств для рендеринга HTML для веб-страниц, он также упрощает рендеринг электронной почты в формате HTML. - person Matt Gibson; 16.02.2011

Вы должны отправлять почту с контроллера, читать данные / и т. д. из модели, когда / если требуется.

person diagonalbatman    schedule 16.02.2011

Я довольно запутался с размещением логики приложения и рабочих процессов в самом контроллере. Отправка деловых электронных писем должна учитываться в логике приложения и рабочем процессе и в соответствии с архитектурой MVC. Модель должна содержать логику приложения и рабочий процесс бизнеса, поскольку это единственный объект, который знает обо всех бизнес-процессах и логике в отношении контроллера, я запутался, следует ли контроллеру сообщать о реализации бизнес-потоков и или он должен напрямую связываться с вспомогательным классом, который реализует почтовые службы в нашем случае .. Однако я вижу, что если контроллер получает состав сообщений, тему и другие свойства сообщения из модели, а затем передает их вспомогательному классу почтовой программы, это имеет больше смысла здесь ... поскольку модель все еще знает о деталях сообщения и роли контроллера можно просто сделать, чтобы получить детали сообщения из модели и передать их вспомогательному классу. я запутался в этом случае, если возникает ошибка при отправке электронной почты через вспомогательный класс, модель должна быть проинформирована или нет, или контроллер либо записывает ее в файл, либо представляет ее для просмотра.. однако, думаю о том, чтобы связаться с поставщиком услуг. Модели напрямую не имеют смысла. в этом случае контроллер отправляет только запросы к модели, модель со своей стороны может связаться с поставщиком услуг от своего имени, чтобы выполнить свою работу и передать вывод обратно контроллеру, который в дальнейшем может передать его для просмотра или дальнейшей обработки...

person Rahul Gupta    schedule 03.08.2018