哪里可以在Symfony2中存储简单的第三方类?

时间:2012-12-21 16:59:25

标签: php symfony

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

3 个答案:

答案 0 :(得分:4)

通常,您使用Composer将项目包含在项目中。我建议你看一下packagist来查看你的班级是否有一个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>

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

查看docs,说明应该如何以及为什么要使用服务容器。

祝你好运。