Вообщем вопрос простой как в yii2 при использовании стандартного функционала прикрепить файл/файлы на лету, т.е. без загрузки на сервер? Прикладывать саму форму не буду она немного безобразна. Вот что в контроллере:
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$name = $model->name;
$tel = $model->tel;
$email = $model->email;
$question = $model->question;
$model->at_file = UploadedFile::getInstance($model, 'at_file');
$at_file = $model->at_file;
$model->sendMail(Yii::$app->params['email_to_send'], 'advice', 'Тестовое письмо', ['name' => $name, 'tel' => $tel, 'email' => $email, 'question' => $question, 'at_file' => $at_file]);
Yii::$app->session->setFlash('form_to_send');
return $this->refresh();
}
Ну и вот функция отправки email:
public function sendMail($email, $view, $subject, $params = []) {
Yii::$app->mailer->getView()->params['name'] = $params['name'];
Yii::$app->mailer->getView()->params['tel'] = $params['tel'];
Yii::$app->mailer->getView()->params['email'] = $params['email'];
Yii::$app->mailer->getView()->params['question'] = $params['question'];
$result = Yii::$app->mailer->compose([
'html' => 'views/' . $view . '-html',
'text' => 'views/' . $view . '-text',
], $params);
foreach ($params['at_file'] as $file) {
$content_file = file_get_contents($file);
$result->attachContent($content_file, [
'fileName' => $file->baseName . '.' . $file->extension,
'contentType' => $file->type]);
}
$result->setTo([$email]);
$result->setSubject($subject);
$result->send();
Yii::$app->mailer->getView()->params['name'] = null;
Yii::$app->mailer->getView()->params['tel'] = null;
Yii::$app->mailer->getView()->params['email'] = null;
Yii::$app->mailer->getView()->params['question'] = null;
return $result;
}
Задача усложнилась теперь они отправляются, но приходят с весом в 0 байт, ну пустые в буквальном смысле.
Вообщем вот такая функция отправляет несколько файлов с прикреплением на лету.
public function sendMail($email, $view, $subject, $params = []) {
Yii::$app->mailer->getView()->params['name'] = $params['name'];
Yii::$app->mailer->getView()->params['email'] = $params['email'];
Yii::$app->mailer->getView()->params['question'] = $params['question'];
$result = Yii::$app->mailer->compose([
'html' => 'views/' . $view . '-html',
'text' => 'views/' . $view . '-text',
], $params);
foreach ($params['at_file'] as $file) {
$content_file = file_get_contents($file->tempName);
$result->attachContent($content_file, [
'fileName' => $file->baseName . '.' . $file->extension,
'contentType' => $file->type]);
}
$result->setTo([$email]);
$result->setSubject($subject);
$result->send();
Yii::$app->mailer->getView()->params['name'] = null;
Yii::$app->mailer->getView()->params['email'] = null;
Yii::$app->mailer->getView()->params['question'] = null;
return $result;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором