2012-09-11 10 views

Respuesta

13

Simplemente haga lo mismo que hace el comando. Desde el comando Ejecutar la función():

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

Es necesario eliminar la salida $ -> ... línea (tal vez pueda hacer algo útil con la variable enviado $). Además, este código busca dos tipos de spool, tal vez no necesita todo el código si su spool no es uno de estos.

+0

Trabajó como un encanto :) Gracias Carlos – Tom

22

Esto también se puede lograr con How can I run symfony 2 run command from controller, por lo que no duplica el código. Trabajó para mi.

services.yml:

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

código del controlador (simplificado):

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

Esta es sin duda la mejor respuesta. –

+0

Sí, y esta es una forma oficial de hacerlo - http://symfony.com/doc/3.2/console/command_in_controller.html –

Cuestiones relacionadas