【问题标题】:Where to store simple 3rd party class in Symfony2?Symfony2 在哪里存储简单的 3rd 方类?
【发布时间】:2012-12-21 16:59:25
【问题描述】:

我是 Symfony2 的新手,我遇到了一些简单的问题,但我不确定如何处理它。我需要使用一个简单的 3rd 方类,但我不确定在项目结构中的何处以及如何存储它。我应该将服务存储在我的 Bundle 中,还是应该将其存储在供应商目录中?如果我将它存储在供应商中,那么将不支持 Symfony 的供应商的库存储在那里不是一个坏习惯吗?

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    通常您在项目中包含Composer。我建议你看一下packagist,看看你的班级是否有 Composer 包,否则你不能用 composer 要求它。

    Composer 将您的类放在vendor 目录中,您应该将所有“供应商”(第 3 方库)放在那里。查看将它们放在该目录中的什么位置,以便 Composer 自动加载器可以自动加载它。

    之后,建议为该特定类创建一个捆绑包。在那里创建服务是最佳实践。例如,如果您的班级是 Foo,您将创建一个 Acme\FooBundle 来加载 Foo 服务:

    // src/Acme/FooBundle/DependencyInjection/AcmeFooExtension.php
    <?php
    
    namespace Acme\FooBundle\DependencyInjection;
    
    use Symfony\Component\Config\FileLocator;
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
    use Symfony\Component\HttpKernel\DependencyInjection\Extension;
    
    class AcmeFooExtension extends Extension
    {
        /**
         * this method loads the Service Container services.
         */
        public function load(array $configs, ContainerBuilder $container)
        {
             $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
    
             // load the src/Acme/FooBundle/Resources/config/services.xml file
             $loader->load('services.xml');
        }
    
    <!-- src/Acme/FooBundle/Resources/config/services.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <container xmlns="http://symfony.com/schema/dic/services"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    
        <services>
            <!-- Loads the \Foo class as a acme_foo.foo service -->
            <service id="acme_foo.foo"
                class="\Foo"
            ></service>
        </services>
    
    </container>
    

    【讨论】:

      【解决方案2】:

      Symfony 本身将第 3 方库存储在 vendor 文件夹中。是good practice 也可以将您的第 3 方课程放在那里

      如果您不知道该怎么做,this question 可能会有所帮助。

      【讨论】:

        【解决方案3】:

        我相信使用服务容器将是一个好习惯。无论如何,服务容器是为了存储第三方依赖和节省松耦合而组成的。

        docs,上面写着如何以及为什么要使用服务容器。

        祝你好运。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多