Не удается разрешить параметр в логическом узле в файлах конфигурации Symfony - PullRequest
0 голосов
/ 11 июля 2019

У меня есть (приватный) комплект, который ожидает логический параметр:

$rootNode
    ->addDefaultsIfNotSet()
    ->children()
        ->booleanNode('property_cache_enabled')->defaultTrue()->end()
    ->end()

Когда я хочу разрешить его до kernel.debug, он выдает исключение:

Недопустимый типдля пути "rvlt_digital_symfony_api.property_cache_enabled".Ожидаемый логический, но получил строку.

Это соответствующая часть конфигурации:

rvlt_digital_symfony_api:
  property_cache_enabled: '%kernel.debug%'

Как это можно решить?Когда я искал эту проблему, я нашел только то, что связано с преобразованием переменных среды;что не помогло, так как это не переменная окружения.

Ответы [ 2 ]

0 голосов
/ 15 июля 2019

Вы можете использовать значение %kernel.debug% для непосредственной настройки вашего модуля без необходимости явной настройки для этого значения.

Измените свой класс конфигурации так, чтобы он шел:

class ApplicationConfiguration implements ConfigurationInterface
{
    private $debug;

    public function  __construct($debug)
    {
        $this->debug = (bool) $debug;
    }

    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder('rvlt_digital_symfony_api');

        $treeBuilder->getRootNode()
            ->addDefaultsIfNotSet()
            ->children()
                ->booleanNode('property_cache_enabled')->defaultValue($this->debug)->end()
            ->end();

        return $treeBuilder;
    }
}

И ваш класс расширения, чтобы при создании экземпляра конфигурации значение %kernel.debug% считывалось из контейнера и вставлялось в экземпляр конфигурации:

class ApplicationExtension extends Extension
{
     public function getConfiguration(array $config, ContainerBuilder $container)
    {
        return new Configuration($container->getParameter('kernel.debug'));
    }
}

Таким образом, если вы не настроите конфигурацию для rvlt_digital_symfony_api.property_cache_enabled, она просто будет соответствовать настройке приложения %kernel.debug%, что вы и хотели. (Вы все равно можете настроить это значение и переопределить значение по умолчанию).

Этот вариант использования подробно описан в документации здесь: Использование параметров в классе внедрения зависимостей

0 голосов
/ 14 июля 2019

Да, вам может понравиться документация здесь using_parameters_in_dic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...