Переместить конфигурацию службы Symfony2 в пакет - PullRequest
21 голосов
/ 30 ноября 2011

У меня есть следующее в моем config.yml

services:
    my.user_provider:
        class: Acme\MySecurityBundle\Security\UserProvider

, но я хотел бы переместить это в config.yml в моем MySecurityBundle/Resources/config, но Symfony2 говорит мне, что служба не существует, когда я перехожуэто.

Как мне получить оттуда файл config.yml?

Ответы [ 3 ]

40 голосов
/ 30 ноября 2011

src/Acme/MySecurityBundle/DependencyInjection/MySecurityExtension.php:

<?php
namespace Acme\MySecurityBundle\DependencyInjection;

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

class MySecurityExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.yml');
    }
}

src/Acme/MySecurityBundle/Resources/config/services.yml:

services:
    my_security.user_provider:
        class: Acme\MySecurityBundle\Security\UserProvider
21 голосов
/ 30 ноября 2011

Я сделал это, сославшись на импорт в app/config.yml:

imports:
    - { resource: "@MySecurityBundle/Resources/config/services.yml" }
16 голосов
/ 30 ноября 2011

Вам необходимо создать класс в этом пакете, называемый «расширением», который сообщает Symfony, что делать при загрузке пакета.Соглашение об именах немного странное.Для Acme \ MySecurityBundle класс будет называться AcmeMySecurityExtension.Он находится в {bundlepath} /DependencyInjection.

Вот пример одного из моих (я загружаю Resources / config / services.xml):

<?php

namespace Acme\MySecurityBundle\DependencyInjection;

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

/**
 * This class is automatically discovered by the kernel and load() is called at startup.
 * It gives us a chance to read config/services.xml and make things defined there available for use.
 * For more information, see http://symfony.com/doc/2.0/cookbook/bundles/extension.html
 */
class AcmeMySecurityExtension extends Extension
{
    /**
     * Called by the kernel at load-time.
     */
    public function load(array $configs, ContainerBuilder $container)
    {
        /*@var XmlFileLoader*/
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('services.xml');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...