• Edit
  • Delete

symfony sfTask cheatsheet

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

 

logBlock() Styles

'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),

Parameter none option

    $this->addOption('no-confirmation', null, sfCommandOption::PARAMETER_NONE,
      'Skip confirmation question');
if (!$options['no-confirmation'])
{
   ...
}

 

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();