MVC PHP - отправка почты из модели - PullRequest
6 голосов
/ 16 февраля 2011

У меня проблема с определением, когда мне следует отправлять почту от Модели или Контроллера.Дело в том, что в контроллере я использую как

Это касается 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 ]

10 голосов
/ 16 февраля 2011

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

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

3 голосов
/ 16 февраля 2011

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

0 голосов
/ 03 августа 2018

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

...