私は Symfony2 を初めて使用し、いくつかの簡単な問題に直面しましたが、それを管理する方法がわかりません。単純なサードパーティ クラスを 1 つ使用する必要がありますが、それをプロジェクト構造のどこにどのように保存すればよいかわかりません。バンドルにサービスを保存する必要がありますか、それともベンダー ディレクトリに保存する必要がありますか? また、ベンダーに保存する場合、Symfony でサポートされていないベンダーのライブラリをそこに保存するのは悪い習慣ではないでしょうか?
1413 次
3 に答える
4
通常、これらはComposerを使用してプロジェクトに含めます。クラスの Composer パッケージがあるかどうかを確認するには、packagistを参照することをお勧めします。
Composer はクラスをvendor
ディレクトリに配置します。すべての「ベンダー」(サードパーティ ライブラリ) をそこに配置する必要があります。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
サービスコンテナを使用することは良い習慣になると信じています。とにかく、サービスコンテナはサードパーティの依存関係を保存し、疎結合を保存するために作られています.
docsを見てください。サービスコンテナを使用する方法と理由が書かれています。
幸運を。
于 2012-12-21T17:18:33.773 に答える