2017-10-10 11 views
0

J'ai une certaine forme d'envoyer un e-mail, mais je ne savais pas comment faire, je suis actuellement en utilisant yii2 ici est ma formeforme yii2 envoyer pièce jointe

<?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(); ?> 

et voici mes modèles

<?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; 
     } 
    } 

et mon contrôleur de site est

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, 
     ]); 
    } 

mais encore une erreur, quelqu'un peut me aider? lequel à corriger, je suis encore débutant à utiliser yii2.

ce que je veux est d'envoyer le message en utilisant mail.php que je sauverai le répertoire de courrier et il enregistre le fichier que le téléchargement de l'utilisateur et le fixer sur l'e-mail, merci pour la réponse

EDIT: l'erreur de mon xampp juste dit "Une erreur interne du serveur s'est produite." mais, il a envoyé un e-mail, je pense que l'erreur est du fichier téléchargé, il ne stocke pas le fichier dans le répertoire uploads/carrière et l'email n'a pas de pièce jointe

EDIT: après avoir vérifié le app.log comme suggéré je l'ai trouvé une erreur erreur: classe 'app\controllers\UploadedFile' introuvable dans le contrôleur de site, mais quand je mets que le changement d'erreur de « propriétés inconnues », voici l'erreur complète après que j'ajouter le

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

Quelle est l'erreur? – gmazzotti

+0

Partager les détails de l'erreur –

+0

Je ne connais pas l'erreur, mais mon xampp localhost montre seulement "Une erreur interne du serveur s'est produite." –

Répondre

0

finalement au bout de 2 jours, j'ai résoudre avec succès mon problème, voici la mise à jour et code final je sur les modèles

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; 
     } 

et sur le contrôleur du site

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]); 
    } 

merci pour ceux qui ont commenté ma question, bonne journée