In Symfony gibt es eine Möglichkeit eigene Commands zu erstellen. Diese funktionieren wie die Standard-Commands (z.B. php bin/console cache:clear
), können dabei jegliche Funktion erfüllen und einen beliebigen Namen tragen. Sie eignen sich auch am besten für Cronjobs, es gibt nur leider ein Problem: Kein Befehl der Form php bin/console my:command
funktioniert im „productive Environment (--env=prod
)“…
Um dies zu umgehen muss man seine eigenen Console schreiben.
Für einfache Commands reichen simple Applications (use Symfony\Component\Console\Application;
). Benutzt das Command das Container-Environment (extends ContainerAwareCommand
) muss man eine andere Application verwenden, die einen AppKernel nachnutzen kann (use Symfony\Bundle\FrameworkBundle\Console\Application;
). Damit lassen sich aber leider keine einzelnen Befehle registrieren, standardmäßig werden einfach alle angezeigt.
#!/usr/bin/env php
<?php
require __DIR__ . '/../vendor/autoload.php';
use Symfony\Bundle\FrameworkBundle\Console\Application;
// remove execution time
set_time_limit(0);
// create a kernel for the application
$kernel = new AppKernel('prod', false);
/**
* Register a console command as php file
* reason: you cannot execute "php bin/console ..." in prod environment
* for this, the class is simple called directly, but fired in an application
*/
$application = new Application($kernel);
$application->run();
Schreibe einen Kommentar