2015-07-21 34 views
-2

我在這裏使用電子郵件發送,其正常使用,同時添加附件,但同時不帶附件發送郵件的代碼抵消了PHP 0,我得到錯誤的入門未定義雖然電子郵件使用未安裝

未定義偏移0

mycode的

if($model->attachment) 
       { 
        $message = Yii::$app->mailer->compose() 
        ->setFrom([ Yii::$app->user->identity->email => 'Fiducial Insurance']) 
        ->setTo($model->email) 
        ->setSubject($model->subject) 
        ->setHtmlBody($model->content); 

        foreach ($model->attachment as $file) 
        { 
         $file->saveAs('emailattachments/' .$file->baseName. '.' . $file->extension); 
         $filename = 'emailattachments/' .$file->baseName. '.' . $file->extension; 
         $message->attach($filename); 
        } 

        $columns = array_map(function($column) { 
         return 'emailattachments/' . $column; 
        }, $model->attachment); 
        $model->attachment = implode(', ', $columns); 

        $message->send(); 

       } 
       else 
       { 
        $message = Yii::$app->mailer->compose() 
        ->setFrom([ Yii::$app->user->identity->email => 'Fiducial Insurance']) 
        ->setTo($model->email) 
        ->setSubject($model->subject) 
        ->setHtmlBody($model->content) 
        ->send(); 
       } 
       $model->save(); 

如何來解決這個錯誤

+0

哪條線給出了錯誤?請提供您收到的完整錯誤。 –

+0

PHP公告 - 警予\基地\ ErrorException 未定義偏移:0,C:\ WAMP \ WWW \基準\供應商\ yiisoft \ yii2 \ DB \ Command.php – Nodemon

回答

0

如果至少有一個附件,則可以將添加附件的行包裝在僅在if中執行的行中。

   //... 
       $hasAttachment = false; 
       foreach ($model->attachment as $file) 
       { 
        $hasAttachment = true; 
        $file->saveAs('emailattachments/' .$file->baseName. '.' . $file->extension); 
        $filename = 'emailattachments/' .$file->baseName. '.' . $file->extension; 
        $message->attach($filename); 
       } 

       if($hasAttachment) { 
        $columns = array_map(function($column) { 
         return 'emailattachments/' . $column; 
        }, $model->attachment); 
        $model->attachment = implode(', ', $columns); 
       } 
       //... 

請嘗試,如果計數($模型 - >附件)也可以工作。上述方法更像是一種解決方法。

爲什麼會發生這種情況?

$model->attachment == array() == true 

http://php.net/manual/en/language.types.boolean.php

這意味着你的代碼塊,即使數組裏面空空如也。如果變量未定義,您將無法進入代碼塊,您可以使用它來模擬unset($model->attachment)

+0

所以我需要做的 – Nodemon

+0

如果我使用未設置($模型 - >附件)附件不起作用 – Nodemon

相關問題