Конфигурации пакета Symfony по умолчанию

Я искал ответ, но не нашел ничего полезного ..

Я спросил на symfony github, но мне сказали написать здесь .. https://github.com/symfony/symfony/issues/28650

Я пишу простой пакет Symfony, но у меня проблема с изменением конфигураций по умолчанию. Я имею в виду, что я хочу использовать переводы yaml (не xliff), сопоставления доктрины yaml (не аннотации), проверку yaml (не аннотации) и т. д. (Я знаю, что yaml в доктрине устарел)

Есть ли возможность изменить эту конфигурацию внутри бандла? Я хочу, чтобы мои пакеты были настроены самостоятельно, я не хочу настраивать доктрину, переводы и т. д. В моем основном приложении.

Спасибо за помощь

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 242
1

Ответы 1

Вы можете определить конфигурацию по умолчанию в Symfony через Классы расширения, также посмотрите это руководство Конфигурация пакета Symfony, оно много объясняет о конфигурации пакета. Конфигурации по умолчанию могут быть для доктрины, переводов или всего, что вы можете настроить на уровне приложения. С помощью Подготовить расширение возможно даже изменение других конфигураций пакетов.

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

FOSOAuthServerBundle - это пример конфигурации Doctrine по умолчанию. Они предпочитают XML, но это выбор формата, логика конфигурации одинакова для XML, YAML или PHP.

Конфигурация msgphp / пользовательский пакет - другой пример конфигурации через файлы PHP.

Давайте поговорим в коде, это пример конфигурации YAML с сущностью доктрины и простым массивом конфигурации. Во-первых, класс create Configuration предоставляет правила конфигурации по умолчанию для нашего пакета.

// 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'

Этот ответ заслуживает большего доверия. Спасибо. Повторим, PrependExtension кажется ответом на вопрос, а остальные детали точны.

grim 29.05.2020 04:14

Спасибо @grim. С вашим сообщением я проверяю, что ответы все еще обновлены для текущей экосистемы Symfony, она в значительной степени актуальна. Благодаря блестящей системе документов Symfony.

ugurerkan 29.05.2020 14:09

Другие вопросы по теме