В ходе обсуждения в русскоязычном чате пользователей 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
При создании таска стандартной командой symfony generate:task и внимательном рассмотрении метода configure сгенерированного класса таска, можно обнаружить опцию application, которая как раз отвечает за то, что нужно. Можно прописать дефолтное значение вместо null и при этом можно пользоваться опциями командной строки ./symfony sandbox:mytask –application=frontend
Т.е. конфигурация тогда автоматически создается? Или что?
Да, именно так, автоматически подгрузятся все необходимые вам YAML, ранее доступные в app frontend.
Да, я уже разведал. Удобно )
За статью спасибо, как раз искал решение это проблемы.
А что еще за способ который предложил Programmer? У меня не получается…
Указывать -–application=frontend, базовый CLI поддерживает это, даже если вы в своем таске его не указывали.
Спасибо, помогло 🙂
Пожалуйста )