1. PHP / Говнокод #18766

    −4

    1. 1
    2. 2
    3. 3
    4. 4
    // Привет коллеги, у меня возникла делема, куда пихать код отправки
    // на e-mail сообщения? В модель формы или в контроллере оставить?
    // фреймворк Yii, в самой Yii доке, написано, что в контроллерах надо
    // оставлять, а вы как делаете?

    Привет коллеги, у меня возникла делема, куда пихать код отправки на e-mail сообщения? В модель формы или в контроллере оставить? Фреймворк Yii, в самой Yii доке, написано, что в контроллерах надо оставлять, а вы как делаете?

    Запостил: proweber1, 27 Сентября 2015

    Комментарии (8) RSS

    • Код вот такой

      private function sendFeedbackFromMail(FeedbackForm $model)
      {
      $message = "Новый отзыв на сайте\n\n"."Имя: {$model->name}\nОтзыв: {$model->message}";

      $sendStatus = Yii::$app->mailer->compose()
      ->setTo($this->settings->email)
      ->setFrom(['[email protected]' => $model->name])
      ->setSubject('Новый отзыв на сайте')
      ->setTextBody($message)
      ->send();

      return $sendStatus;
      }

      // TODO надо рефакторить, что-то мне подсказывает, что это говнокод
      public function actionSend()
      {
      $model = new FeedbackForm();

      if ($model->load(Yii::$app->request->post()) && $model->validate()) {
      if ($this->sendFeedbackFromMail($model)) {
      return $this->render('success', [
      'message' => $this->settings->successMessageFromSendFeedback,
      ]);
      }

      return $this->render('fail', [
      'message' => $this->settings->failMessageFromSendFeedback,
      ]);
      }

      return $this->redirect(['site/index']);
      }
      Ответить
      • Для экшена send стоит verb фильтр, только на POST запросы
        Ответить
      • И что на счет метода $this->render() в экшене send? Может лучше добавить еще 2 экшена, например success и fail и делать редиректы на них?
        Ответить
    • > куда пихать код отправки на e-mail сообщения?
      В background worker'а.

      render() само собой в топку. Из POST'ов что-то выводить - ССЗБ. Юзер нажмёт F5 или назад и у него еще раз мыло отправится... Только редирект, только хардкор.
      Ответить
      • Это типа RabbitMQ?
        Ответить
      • >background worker
        В пхп такое вообще существует? Там же все умирает когда клиент дисконнектится.
        Ответить
    • Background worker'а? Это куда?
      Ответить
      • Для пхп нет бэкграундных воркеров? Хотя не удивлюсь, ведь тут и в доке на фреймворк написано что это в контроллере надо делать :facepalm:
        https://www.google.ru/search?q=yii+background+job&ie=utf-8&oe=utf-8&gws_rd=cr&ei=JKEHVq6zEcaGywOFlJXoCg
        Ответить

    Добавить комментарий