Моя цель
В Plesk я хочу часто запускать PHP-скрипт с использованием PHP 7.2. Это должен быть PHP-скрипт, а не консольная команда ( для получения более подробной информации см. «Моя среда» ). Моя текущая реализация на базе Symfony 4.2 работает нормально, но помечена как устарела .
Как указано здесь , ContainerAwareCommand
помечен deprecated
в Symfony 4.2. К сожалению, ссылка на статью о том, как решить эту проблему в будущем, не содержит информации о ней.
Мое окружение
Мой общий веб-хостинг (Plesk) работает с PHP 7.0, но позволяет запускать сценарии с PHP 7.2. Позже это возможно, только если он напрямую запускает скрипт PHP и не как консольную команду. Мне требуется PHP 7.2.
Я знаю типы инъекций в Symfony. Исходя из моих текущих знаний, эту проблему можно решить только с помощью подхода getContainer
или предоставлением всех служб вручную, например, через конструктор, что приведет к путанице в коде.
Текущее решение
Файл: cron1.php
<?php
// namespaces, Dotenv and gathering $env and $debug
// ...
$kernel = new Kernel($env, $debug);
$app = new Application($kernel);
$app->add(new FillCronjobQueueCommand());
$app->setDefaultCommand('fill_cronjob_queue');
$app->run();
Файл: FillCronjobQueueCommand.php
<?php
// ...
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class FillCronjobQueueCommand extends ContainerAwareCommand
{
protected function configure()
{
$this->setName('fill_cronjob_queue');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// using "$this->getContainer()" is deprecated since Symfony 4.2
$manager = $this->getContainer()->get('doctrine')->getManager();
$cron_queue_repo = $manager->getRepository(CronjobQueue::class);
$cronjobs = $manager->getRepository(Cronjob::class)->findAll();
$logger = $this->getContainer()->get('logger');
// ...
}
}