Symfony command

Ha szeretnénk ütemezve indítani cron-al scripteket, pl email értesítés, gdpr miatt anonymizálni régi adatokat stb, akkor symfony-ban a command-okat használhatjuk.

Command -okat az Command mappában hozzuk létre. A defaultName változóban adjuk meg a nevét a parancsnak. A configure függvényben állíthathatunk be leírást a scriptünkről, hogy mit is csinál valójában. Az execute-ben lesz a kód ami lefut.
 
<?php

namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ODM\MongoDB\DocumentManager as DocumentManager;

class DeleteOldEntitiesCommand extends Command
{
    private $em;
    private $dm;

    // the name of the command (the part after "bin/console")
    protected static $defaultName = 'app:delete-old-entities';

    public function __construct(EntityManagerInterface $em, DocumentManager $dm)
    {
        parent::__construct();
        $this->em = $em;
        $this->dm = $dm;
    }

    protected function configure()
    {
        $this
            ->setDescription('Delete old entities.')
            ->setHelp('This command delete old entities...');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeln([
            'Start script: ' . date("Y-m-d H:i:s")
            '============',
            '',
        ]);

        ...

        $output->writeln([
            '',
            'Finish script: ' . date("Y-m-d H:i:s"),
            '============',
            '',
        ]);

        return 0;
    }

A konzolban a következő paranccsal tudjuk elindítani a scriptünket:
 
# php bin/console app:delete-old-entities

A cron-ban vagy ütemezőben csak a fenti parancsot kell csak beraknunk.

Olvasnivaló:
https://symfony.com/doc/current/console.html
2020.08.22.