symfony sfTask cheatsheet
Arguments / Options
Optional Argument:
-
$this->addArgument('recursionDepth', sfCommandArgument::OPTIONAL, 'Levels of recursion', 3);
Optional option
-
$this->addOption('baseUrl', null, sfCommandOption::PARAMETER_OPTIONAL, 'Base URL', 'https://www.example.com');
Flag, option without value, only true or false
-
$this->addOption('no-confirmation', null, sfCommandOption::PARAMETER_NONE, 'Skip confirmation question'); -
if (!$options['no-confirmation']) { ... }
logBlock
$this->logBlock($text, 'INFO');
- 'ERROR' => array('bg' => 'red', 'fg' => 'white', 'bold' => true),
- 'INFO' => array('fg' => 'green', 'bold' => true),
- 'COMMENT' => array('fg' => 'yellow'),
- 'QUESTION' => array('bg' => 'cyan', 'fg' => 'black', 'bold' => false),
Error Handling
Normally a sfTask returns shell exit status / error code 0.
In case of PHP exception and errors it returns 1.
The shell exit status of the last command can be checked with
echo $?
This is great for using sfTasks in cronjobs. Normally they are quiet, but send an email in case of errors with the following configuration:
vi /etc/crontab
MAILTO="errors@example.com" # m h dom mon dow user command # ullMail 25 4 * * * php /foo/bar/symfony ull_mail:process-bounced-emails > /dev/null
Create context and use doctrine in sfTask
Note: it seems that the "prod" environment is necessary for createInstance()
protected function execute($arguments = array(), $options = array())
{
$this->logSection($this->name, 'Initializing');
$databaseManager = new sfDatabaseManager($this->configuration);
sfContext::createInstance($this->configuration);
sfContext::getInstance()->getConfiguration()->loadHelpers(array('ull'));
...
}
Include libs from /apps/
$autoloader = sfSimpleAutoload::getInstance();
$autoloader->addDirectory(sfConfig::get('sf_lib_dir'));
$autoloader->addDirectory(sfConfig::get('sf_app_lib_dir'));
$autoloader->register();
Use Mailing
$this->initializeDatabaseConnection($arguments, $options);
sfContext::createInstance($this->configuration);
sfContext::getInstance()->getConfiguration()->loadHelpers(array('ull'));
ullCoreTools::fixRoutingForCliAbsoluteUrls();
// Force symfony autoloader to load Swift classes
$this->getMailer();
Get all Doctrine Models
Doctrine::loadModels(sfConfig::get('sf_lib_dir') . '/model/');
$modelNames = Doctrine::getLoadedModels();

