2017-10-10 97 views
0

我有一些表格发送电子邮件,但我不知道该怎么做,我目前使用yii2这里是我的形式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我节省邮件目录的消息,它会将该文件保存用户上传,将其附加在电子邮件,感谢您的回答

编辑:从错误我xampp只是表示“发生内部服务器错误。”但它,它发送的电子邮件,我认为错误是从上传的文件,它不存储该文件目录上传/职业和电子邮件没有附件

编辑:检查后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('Getting write-only property: ' . get_class($this) . '::' . $name); } else { throw new UnknownPropertyException('Getting unknown property: ' . 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() 

$model->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() 
+0

什么是错误? – gmazzotti

+0

分享错误信息 –

+0

我不知道错误,但是我的xampp localhost只显示“发生了内部服务器错误。” –

回答

0

最后2天之后,我已经成功地解决我的问题,这里是我的模型

public function career($email,$filess) 
    {if ($this->validate()) { 

       Yii::$app->mailer->compose('mail.php' ,[ 
        'name' => $this->name,]) 
        ->setTo($email) 
        ->setFrom([$this->email => $this->name]) 
        ->setSubject('subject, '.$this->name) 
        ->attach($filess) 
        ->send(); 
        return true; 
      } 
      return false; 
     } 

和站点控制器上使用 的更新权及最终代码

public function actionCareer_2() 
    { 
     $model = new CareerForm(); 

     if (Yii::$app->request->isPost) { 
      $model->files = UploadedFile::getInstance($model, 'files'); 
      $model->files->saveAs('uploads/career/' . $model->files->baseName . '.' . $model->files->extension); 
      $model->path = 'uploads/career/' . $model->files->baseName . '.' . $model->files->extension; 
     } 
     if ($model->load(Yii::$app->request->post()) && $model->career(Yii::$app->params['adminEmail'],$model->path)) { 
      Yii::$app->session->setFlash('CareerFormSubmitted'); 
      return $this->refresh(); 
     } 
     return $this->render('career_2', ['model' => $model]); 
    } 

感谢任何对我的问题发表评论的人,好日子