2012-12-21 5 views
6

私はSymfony2を初めて使っていますが、私はいくつかの簡単な問題に直面しましたが、どのように管理するのかは分かりません。単純なサードパーティのクラスを1つ使用する必要があります。プロジェクト構造にどこにどのように格納するのかはわかりません。私はバンドルにサービスを保存する必要がありますか、それともベンダのディレクトリに保存する必要がありますか? Symfonyがサポートするベンダーではないライブラリをそこに保存するのは悪い習慣ではありませんか?symfony2で単純なサードパーティクラスをどこに保存するのですか?

答えて

4

通常、あなたのプロジェクトにはComposerが含まれています。あなたのクラス用のComposerパッケージがあるかどうかを調べるには、packagistを見てください。それ以外の場合は、コンポーザーで要求することはできません。

Composerはクラスをvendorディレクトリに置きます。そこにすべてのベンダー(第三者図書館)を置く必要があります。 Composerのオートローダーが自動ロードできるように、そのディレクトリーにそれらを入れる場所を見てください。

その後、その特定のクラスのバンドルを作成することをお勧めします。そこにサービスを作成するのがベストプラクティスです。

// 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> 
:あなたのクラスがある場合たとえば、あなたは Foo Fooサービスをロード Acme\FooBundleを作成します
1

Symfony自体はサードパーティのライブラリをvendorsフォルダに保存します。 good practiceあなたのサードパーティのクラスをそこに置くこともあります

あなたがそれを行う方法がわからない場合は、おそらくthis questionが役立ちます。

1

私は、サービスコンテナを使用することが良い習慣になると思います。とにかく、サービスコンテナは、サードパーティの障害を保存し、疎結合を保存するために作られています。

docsには、サービスコンテナの使用方法と使用方法が記載されています。

幸運。

関連する問題