stackoverflow.com/questions/47915952/...

аюсь импортировать файл конфигурации yaml в свое приложение, следуя документации, приведенной здесь:http://symfony.com/doc/current/bundles/extension.html но у меня всегда есть сообщение об ошибке:Нет расширения, способного загрузить конфигурацию для «приложения»

Мой файл находится здесь:конфигурации / пакеты / app.yaml и имеет следующую структуру:

app:  
    list:  
        model1:  
            prop1: value1
            prop2: value2  
        model2:
            ...

Поскольку это простое приложение, все файлы находятся в «src /». Так что я :
ЦСИ / внедрение зависимости / AppExtension.php

<?php

namespace App\DependencyInjection;

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

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

ЦСИ / внедрение зависимости / configuration.php

<?php

namespace App\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('app');

        // Node definition
        $rootNode
            ->children()
                ->arrayNode('list')
                    ->useAttributeAsKey('name')
                    ->requiresAtLeastOneElement()
                    ->prototype('array')
                        ->children()
                            ->requiresAtLeastOneElement()
                            ->prototype('scalar')
                            ->end()
                        ->end()
                    ->end()
                ->end()
            ->end();

        return $treeBuilder;
    }
}

Я не могу получить доступ к своим параметрам :(
Любая идея ? Благодарю.

 Cerad21 дек. 2017 г., 21:16
В S4 больше нет AppBundle, поэтому этот подход не будет работать. Если вам это действительно нужно по какой-то причине, то создайте AppBundle, как у S3.

Ответы на вопрос(1)

Решение Вопроса

тки его параметров с помощью класса Extension (как в расширении пакета Symfony, но без создания пакета), чтобы в конечном итоге «создать» и добавить один или несколько из них в «контейнер» (до того, как он будет скомпилирован) вы можете зарегистрировать свой класс Extension вручную вconfigureContainer метод, содержащийся вKernel.php файл:

protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
    {
        # to avoid the same error you need to put this line at the top if your file is stored under "$this->getProjectDir().'/config'" directory
        $container->registerExtension(new YourAppExtensionClass());

        #----- rest of the code
    }

Тогда вы можете использовать свои параметры как обычнорегистрация пропуска компилятора.

Надеюсь это поможет.

 Cerad21 дек. 2017 г., 23:27
Возможно, стоит взглянуть и на этот вопрос:stackoverflow.com/questions/47915952/...
 Cerad21 дек. 2017 г., 22:43
Не видел этого раньше, но это действительно работает. Немного документации по регистрации расширений вне пакетов:symfony.com/doc/current/components/dependency_injection/...
 gp_sflover21 дек. 2017 г., 23:01
@Cerad спасибо за ссылку (изначально я написал ответ очень быстро). Лично я обнаружил метод, глядя на исходный код расширенных классов (как я обычно делаю, чтобы узнать, как работает Symfony внутри) :-). PS: не стесняйтесь улучшать (также грамматика) мой ответ (мой английский это не так хорошо).

Ваш ответ на вопрос