2017-09-02 65 views
0

我錯過了什麼?Symfony 3 SwiftMailer as a Service

services.yml

AppBundle\Services\ItemAddService: 
    arguments: ['@mailer'] 

ItemAddService類

namespace AppBundle\Services; 

class ItemAddService{ 

private $mymailer; 

public function __construct(\Swift_Mailer $mailer){ 

    $this->mymailer = $mailer; 

} 

public function itemCreatedMailer(){ 

    $message = (new \Swift_Message('Hello Email')) 
     ->setFrom('[email protected]') 
     ->setTo('[email protected]') 
     ->setBody("Successfully got SwiftMailer to mail from Symfony3"); 

    $this->mymailer->send($message); 

    return "Check mail"; 

} 
} 

當我打電話itemCreateMailer()控制器我得到這個

「類型錯誤:傳遞給的appbundle \服務參數1 \ ItemAddService :: __ construct()必須是SwiftMailer的一個實例,沒有給出,在/home/admin-daniel/symfony-test-sites/july132017/src/AppBundle/Controller/DefaultController.php中調用「

缺少的東西....

回答

-1

在services.yml試試這個

AppBundle\Services\ItemAddService: arguments: $mailer: '@mailer'

+0

我沒有...我只是複製粘貼你的代碼,它仍然無法正常工作。起初我以爲我需要一個Swift的使用語句,但它並不需要通過一個參數。我不明白。我承認我是Symfony的新手,但我對PHP有一個非常清晰的理解,並且覺得我錯過了一些小事......因爲通常情況就是這樣......我很欣賞響應先生... – dlhines

0

你不需要使用,因爲你使用‘\’之類的名稱就是之前意味着全班的名字。看看我的服務檔案https://github.com/ismail1432/eniams-website/blob/master/app/config/services.yml。之後,在您的Controller中通過app.send_mail的id調用服務,但您可以根據需要命名它。所以在控制器中做$ this-> get('app_send_mail') - > itemCreatedMailer();

+0

好吧。這有點有用。現在我得到這個... 類型錯誤:傳遞給Swift_Mailer :: newInstance()的參數1必須實現接口Swift_Transport,沒有給出,在/ home/admin-daniel/symfony-test-sites/july132017/src/AppBundle中調用第20行的/Services/ItemAddService.php 我不明白爲什麼原文不起作用。它適用於所有其他實例,我可以在文檔中找到「Swift_Mailer」...我感謝你的時間......這個框架是詳盡無遺的... 如何實現Transport? – dlhines

+0

對不起,但我不明白,現在怎麼了? :-) –

+0

好的,正如錯誤所述,我沒有爲Swift_Transport實現接口。 swift的所有參數和設置似乎在我的配置和參數文件中正確定義爲un,pw和transport,如gmail ...如果我在控制器中使用相同的消息設置,不知道... – dlhines