У меня есть форма отправки электронной почты, но я не знал, как это сделать, я в настоящее время использую yii2
вот моя форма
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; use yii\captcha\Captcha; use yii\mail\BaseMailer; $this->title = 'Career'; $this->params['breadcrumbs'][] = $this->title; ?> <?php $form = ActiveForm::begin(['id' => 'career-form']); ?> <?= $form->field($model, 'name')->textInput(['autofocus' => true, 'placeholder' => 'Name', 'class' => 'required'])->label(false) ?> <?= $form->field($model, 'files')->fileInput() ?> <input id="career-form-submit" type="submit" value="SUBMIT"> <?php if (Yii::$app->session->hasFlash('CareerFormSubmitted')): ?> <?php ActiveForm::end(); ?>
и вот мои модели
<?php namespace app\models; use Yii; use yii\base\Model; use yii\web\UploadedFile; class CareerForm extends Model { public $name; public $files; public function rules() { return [ [['name','files'], 'required'], ['files','file'],]; } public function upload() { if ($this->validate()) { $this->files->saveAs('uploads/career/' . $this->file->baseName . '.' . $this->files->extension); $this->files = 'uploads/career/' . $this->file->baseName . '.' . $this->files->extension; return true; } else { return false; } } public function career($email) { if ($this->validate()) { Yii::$app->mailer->compose('mail.php' ,[ 'name' => $this->name, ]) ->setTo($email) ->setFrom([$this->email => $this->name]) ->setSubject('subject, '.$this->name) ->attach($this->files) ->send(); return true; } return false; } }
и мой контроллер сайта
public function actionCareer_2() { $model = new CareerForm(); //$model->upload(); if ($model->load(Yii::$app->request->post()) && $model->career(Yii::$app->params['adminEmail'])) { Yii::$app->session->setFlash('CareerFormSubmitted'); $model->files = UploadedFile::getInstance($model, 'files'); $model->upload(); return $this->refresh(); } return $this->render('career_2', [ 'model' => $model, ]); }
но это все еще ошибка, может ли кто-нибудь мне помочь? который исправлять, я все еще новичок, чтобы использовать yii2
.
я хочу отправить сообщение, используя mail.php
который я сохраняю в почтовом каталоге, и он сохранит файл, который загружает пользователь и прикрепляет его по электронной почте, спасибо за ответ
EDIT: ошибка моего xampp
только что сказала: «Произошла внутренняя ошибка сервера». но, он отправил электронную почту, я думаю, что ошибка из загруженного файла, она не хранит файл в каталоге uploads / career, и у электронной почты не было вложения
EDIT: после проверки app.log, как и предложено, я обнаружил некоторую ошибку. Ошибка: 'app\controllers\UploadedFile'
не найдена в контроллере сайта, но когда я полагаю, что ошибка изменилась на «неизвестные свойства», вот полная ошибка после того, как я добавив
yii\base\UnknownPropertyException: Getting unknown property: app\models\CareerForm::file in C:\xampp\htdocs\project\vprojectr\yiisoft\yii2\base\Component.php:143
if (method_exists ($ this, 'set'. $ name)) {throw new InvalidCallException ('Получение свойства только для записи:'. get_class ($ this). '::'. $ name); } else {throw new UnknownPropertyException ('Получение неизвестного свойства:'. get_class ($ this). '::'. $ name); }
Stack trace: #0 C:\xampp\htdocs\project\models\CareerForm.php(86): yii\base\Component->__get('file')
$ this-> files-> saveAs ('uploads / career /'. $ this-> file-> baseName. '.'. $ this-> files-> extension);
#1 C:\xampp\htdocs\project\controllers\SiteController.php(117): app\models\CareerForm->upload()
$ Модели-> загрузить ();
#2 [internal function]: app\controllers\SiteController->actionCareer_2() #3 C:\xampp\htdocs\project\vprojectr\yiisoft\yii2\base\InlineAction.php(55): call_user_func_array(Array, Array) #4 C:\xampp\htdocs\project\vprojectr\yiisoft\yii2\base\Controller.php(154): yii\base\InlineAction->runWithParams(Array) #5 C:\xampp\htdocs\project\vprojectr\yiisoft\yii2\base\Module.php(454): yii\base\Controller->runAction('career_2', Array) #6 C:\xampp\htdocs\project\vprojectr\yiisoft\yii2\web\Application.php(84): yii\base\Module->runAction('site/career_2', Array) #7 C:\xampp\htdocs\project\vprojectr\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) #8 C:\xampp\htdocs\project\web\index.php(12): yii\base\Application->run()