Пользовательский файл конфигурации YAML в Symfony 4 - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать пользовательский файл конфигурации за пределами config/packages, так как мне нужен этот файл для записи.Я понимаю, что Symfony 4 не определяет AppBundle, как предыдущие версии.Я видел похожие проблемы с решениями, которые не работают для моего конкретного случая.

До сих пор я создал следующие файлы:

# config/settings.yaml

settings:
    foo: 3
<?php

namespace App\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $tree_builder = new TreeBuilder();
        $root_node = $tree_builder->root('settings');

        $root_node
            ->addDefaultsIfNotSet()
            ->children()
                ->scalarNode('foo')
                    ->defaultValue(1)
                ->end()
            ->end()
        ;

        return $tree_builder;
    }
}
<?php

namespace App\DependencyInjection;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;

class SettingsExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../../config'));
        $loader->load('settings.yaml');

        $container->setParameter('settings.foo', $config['foo']);
    }
}

И я 'мы загрузили расширение в Kernel.php как:


    protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
    {
        $container->registerExtension(new SettingsExtension());
        $container->loadFromExtension('settings');

        ...
    }

Но если получим следующую ошибку:

There is no extension able to load the configuration for "settings" (in src/DependencyInjection/../../config/settings.yaml). Looked for namespace "settings", found none

1 Ответ

0 голосов
/ 18 февраля 2019

Вы берете проблему не с того конца.

, так как мне нужно, чтобы этот файл был доступен для записи

Если вы хотите выполнить какие-то процессы (развертывание?)изменить конфигурацию перед генерацией кеша, проблема с правами доступа - проблема с OPS.Конечно, вы не можете найти способ сделать запись config / services.yml доступной для записи, используя правильную систему разрешений.
Файлы параметров были заменены на .env переменные файла и среды, вы можете написать их?

Если вы хотите изменить глобальные параметры, это будет намного проще с помощью базы данных (смотрите CraueConfigBundle ).
Файлы Yaml помещаются в кеш.это означает, что динамически писать yaml не удастся в продукт.

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