Сниппет: загружаем переменные app.yml из CLI task в symfony

В ходе обсуждения в русскоязычном чате пользователей 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

This entry was posted in Профессиональное and tagged , , , . Bookmark the permalink. Post a comment or leave a trackback: Trackback URL.

8 Comments

  1. Sergey
    Posted 2010/06/03 at 3:49 pm | Permalink

    При создании таска стандартной командой symfony generate:task и внимательном рассмотрении метода configure сгенерированного класса таска, можно обнаружить опцию application, которая как раз отвечает за то, что нужно. Можно прописать дефолтное значение вместо null и при этом можно пользоваться опциями командной строки ./symfony sandbox:mytask –application=frontend

    • hudson
      Posted 2010/06/04 at 1:14 pm | Permalink

      Т.е. конфигурация тогда автоматически создается? Или что?

      • Programmer
        Posted 2010/09/10 at 11:34 am | Permalink

        Да, именно так, автоматически подгрузятся все необходимые вам YAML, ранее доступные в app frontend.

        • hudson
          Posted 2010/09/10 at 12:14 pm | Permalink

          Да, я уже разведал. Удобно )

          • cybexx
            Posted 2011/03/17 at 12:31 pm | Permalink

            За статью спасибо, как раз искал решение это проблемы.
            А что еще за способ который предложил Programmer? У меня не получается…

          • hudson
            Posted 2011/03/19 at 1:09 pm | Permalink

            Указывать -–application=frontend, базовый CLI поддерживает это, даже если вы в своем таске его не указывали.

  2. Albatros
    Posted 2011/03/20 at 4:57 pm | Permalink

    Спасибо, помогло :)

    • hudson
      Posted 2011/03/20 at 8:31 pm | Permalink

      Пожалуйста )

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">