В ходе обсуждения в русскоязычном чате пользователей symfony возник вопрос о загрузке конфигурационных констант из app.yml в контексте CLI таска. Как правило, с теми классами, которые работают из-под приложения (frontend, backend или что там у вас), проблем не возникает. Не зависимо от того на каком уровне расположен app.yml, к нему можно получить доступ стандартными средствами через sfConfig::get().
В тасках же конфигурация уровня приложения не инициализируется, поэтому sfConfig::get('app_some_param') будет возвращать NULL. Немного покопавшись в API родился такой сниппет-скелетон таска:
<?php
/**
* @package
* @subpackage task
* @author dmitry.bykadorov@gmail.com
* @version SVN: $Id: $
*/
class TestTask extends sfBaseTask
{
protected function configure()
{
$this->namespace = 'sf';
$this->name = 'test';
$this->briefDescription = 'TODO';
$this->detailedDescription = <<<EOF
TODO
EOF;
}
protected function execute($arguments = array(), $options = array())
{
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', true);
var_dump( sfConfig::get( "app_some_param" ) );
}
}
Протестировано на sf_root_dir/config/app.yml
8 Comments
При создании таска стандартной командой symfony generate:task и внимательном рассмотрении метода configure сгенерированного класса таска, можно обнаружить опцию application, которая как раз отвечает за то, что нужно. Можно прописать дефолтное значение вместо null и при этом можно пользоваться опциями командной строки ./symfony sandbox:mytask –application=frontend
Т.е. конфигурация тогда автоматически создается? Или что?
Да, именно так, автоматически подгрузятся все необходимые вам YAML, ранее доступные в app frontend.
Да, я уже разведал. Удобно )
За статью спасибо, как раз искал решение это проблемы.
А что еще за способ который предложил Programmer? У меня не получается…
Указывать -–application=frontend, базовый CLI поддерживает это, даже если вы в своем таске его не указывали.
Спасибо, помогло
Пожалуйста )