Вы можете определить конфигурацию по умолчанию в Symfony через Классы расширений , также посмотрите это Руководство по настройке Symfony Bundle , оно многое объясняет о конфигурации пакета.Конфигурации по умолчанию могут быть для доктрины, переводов или чего-либо еще, что вы можете настроить на уровне приложения.Даже изменение конфигурации других комплектов возможно с Prepend Extension
Компонент Config отвечает за управление этими правилами конфигурации, вы можете узнать больше о Компонент Config и Определениеи Обработка значений конфигурации страниц в документации.
FOSOAuthServerBundle является примером конфигурации Doctrine по умолчанию.
Они предпочитают XML, но это решение о формате, логика конфигурации одинакова для XML, YAML или PHP.
msgphp / user-bundle Конфигурация является другим примером конфигурации с помощью файлов PHP.
Давайте поговорим в коде, это пример конфигурации YAML с сущностью doctrine ипростой конфигурационный массив.Во-первых, создать класс конфигурации предоставляет правила конфигурации по умолчанию для нашего комплекта.
// src/Acme/HelloBundle/DependencyInjection/Configuration.php
namespace Acme\HelloBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('acme_hello');
$rootNode
->children()
->arrayNode('simple_array')
->children()
->scalarNode('foo')->end()
->scalarNode('bar')->end()
->end()
->end()
->arrayNode('doctrine')
->children()
->arrayNode('entity')
->children()
->scalarNode('class')->isRequired()->cannotBeEmpty()->end()
->end()
->end()
->arrayNode('manager')
->children()
->scalarNode('class')->defaultValue('Acme\\HelloBundle\\Entity\\Manager\\EntryManager')->end()
->end()
->end()
->end()
->end()
->end()
;
return $treeBuilder;
}
}
Во-вторых, подготовьте класс расширения нашего пакета для загрузки этих конфигураций.
//src/Acme/HelloBundle/DependencyInjection/AcmeHelloExtension.php
namespace Acme\HelloBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
class AcmeHelloExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__.'/../Resources/config')
);
$loader->load('acme_hello.yaml');
$loader->load('services.yaml');
// you now have these 2 config keys
// $config['simple_array'] and $config['doctrine']
// $container->getDefinition('acme_hello.simple_array.foo');
}
}
Наконец, создайте определения YAML по умолчанию и зарегистрируйте наш менеджер ввода в контейнере.
//src/Acme/HelloBundle/Resources/config/acme_hello.yaml
acme_hello:
simple_array:
foo: 'hello'
bar: 'world'
doctrine:
entity:
class: 'Acme\HelloBundle\Entity\Entry'
manager:
class: 'Acme\HelloBundle\Entity\Manager\EntryManager'
//src/Acme/HelloBundle/Resources/config/services.yaml
services:
acme_hello.entry_manager:
class: '%acme_hello.doctrine.manager.class%'
arguments: [ '@doctrine.orm.entity_manager', '%acme_hello.doctrine.entity.class%' ]
Также мы можем переопределить конфигурацию по умолчанию на уровне приложения.
//config/packages/acme_hello.yaml
acme_hello:
simple_array:
foo: 'world'
bar: 'hello'