douhui1630 2018-09-23 13:17
浏览 74
已采纳

在命令中使用SwiftMailer - Symfon 4.1

I created a simple command witch takes url and look if website is up if not send email to me, but the problem is i don`t know how to add SwiftMailer to Command execute.

    <?php

namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use App\Entity\Products;
use App\Entity\Settings;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

class CheckwebsitesCommand extends ContainerAwareCommand
{
    protected static $defaultName = 'checkwebsites';

    protected function configure()
    {
        $this
            ->setName('app:checkwebsites')
            ->setDescription('Add a short description for your command')

        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output, \Swift_Mailer $mailer)
    {

if i add a:

protected function execute(InputInterface $input, OutputInterface $output, \Swift_Mailer $mailer)
{

then i have a error:

 Warning: Declaration of App\Command\CheckwebsitesCommand::execute(Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output, $id)
  should be compatible with Symfony\Component\Console\Command\Command::execute(Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $ou
  tput)

i cant understand this "Commands" thing, why i cany just attach bundles witch, as i want ? I wanna use Commands to setup crons.

******EDIT

   foreach($websites as $website) {
                       $www = $website->getJson();
                       $online = url_test($www['website']['www']);
                       if(!$online) {
                         $message = (new \Swift_Message('Nie działa strona '.$www['website']['www'].' !'))
                         ->setFrom(''.$emailform.'')
                         ->setTo(''.$emailform.'')
                         ->setBody(
                           $this->templating->renderView(
                             'emails/websitenoworking.html.twig',
                             array(
                               'www' => $website['website']['www'],
                             )
                           ),
                           'text/html'
                         );
                         $mailer->send($message);
                       }
                     }
  • 写回答

2条回答 默认 最新

  • dongtun1683 2018-09-23 14:16
    关注

    Just to follow up a bit on my injection comment, given that you are using S4.1 you should probably avoid using the ContainerAwareCommand as well. Using the container as a service locator is so last year. Strict dependency injection is the recommended approach.

    namespace App\Command;
    
    use Twig\Environment;
    use Doctrine\ORM\EntityManagerInterface;
    use Symfony\Component\Console\Command\Command;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Output\OutputInterface;
    
    class MailerCommand extends Command
    {
        private $entityManager;
        private $mailer;
        private $twig;
    
        public function __construct(
            EntityManagerInterface $entityManager, 
            \Swift_Mailer $mailer,
            Environment $twig
        )
        {
            parent::__construct();
            $this->entityManager = $entityManager;
            $this->mailer = $mailer;
            $this->twig = $twig;
        }
        protected function configure()
        {
            $this
                ->setName('app:checkwebsites')
                ->setDescription('Add a short description for your command')
            ;
        }
        protected function execute(InputInterface $input, OutputInterface $output)
        {
            echo "Hello there
    ";
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路