我是 Symfony2 的新手,我遇到了一些简单的问题,但我不确定如何处理它。我需要使用一个简单的 3rd 方类,但我不确定在项目结构中的何处以及如何存储它。我应该将服务存储在我的 Bundle 中,还是应该将其存储在供应商目录中?如果我将它存储在供应商中,那么将不支持 Symfony 的供应商的库存储在那里不是一个坏习惯吗?
问问题
1413 次
3 回答
4
通常,您使用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>
于 2012-12-21T17:30:27.810 回答
1
于 2012-12-21T17:18:33.773 回答