2012-09-11 36 views

回答

13

只要執行與命令相同的操作即可。從命令執行()函數:

$mailer  = $this->getContainer()->get('mailer'); 
    $transport = $mailer->getTransport(); 

    if ($transport instanceof \Swift_Transport_SpoolTransport) { 
     $spool = $transport->getSpool(); 
     if ($spool instanceof \Swift_ConfigurableSpool) { 
      $spool->setMessageLimit($input->getOption('message-limit')); 
      $spool->setTimeLimit($input->getOption('time-limit')); 
     } 
     if ($spool instanceof \Swift_FileSpool) { 
      if (null !== $input->getOption('recover-timeout')) { 
       $spool->recover($input->getOption('recover-timeout')); 
      } else { 
       $spool->recover(); 
      } 
     } 
     $sent = $spool->flushQueue($this->getContainer()->get('swiftmailer.transport.real')); 

     $output->writeln(sprintf('sent %s emails', $sent)); 
    } 

您需要刪除$輸出 - > ...線(也許你可以做一些與$送變電有用)。此外,這段代碼尋找兩種假脫機,也許你不需要所有的代碼,如果你的假脫機不是這些類型之一。

+0

工作就像一個魅力:)謝謝卡洛斯 – Tom

22

這也可以通過How can I run symfony 2 run command from controller來實現,所以你不要複製代碼。爲我工作。

services.yml:

services: 
    swiftmailer.command.spool_send: 
     class: Symfony\Bundle\SwiftmailerBundle\Command\SendEmailCommand 
     calls: 
      - [ setContainer, ["@service_container"] ] 

控制器代碼(簡化):

$this->get('swiftmailer.command.spool_send')->run(new ArgvInput(array()), new ConsoleOutput()); 
+0

這絕對是更好的答案。 –

+0

是的,這是一個官方的方式來做到這一點 - http://symfony.com/doc/3.2/console/command_in_controller.html –

相關問題