如何使用Symfony依赖注入容器配置Doctrine 2.1?

时间:2011-09-16 16:06:03

标签: symfony1 dependency-injection doctrine-orm

您好我正在使用Symfony DIC来配置Doctrine。 这与Doctrine 2.0完全兼容,但是想要升级到v2.1并需要添加一些额外的配置,如下所示。

$ reader = new \ Doctrine \ Common \ Annotations \ AnnotationReader();

$reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
// new code necessary starting here
$reader->setIgnoreNotImportedAnnotations(true);
$reader->setEnableParsePhpImports(false);

我的DIC配置上面的代码没有我的问题:

<service id="doctrine.metadriver" class="Doctrine\ORM\Mapping\Driver\AnnotationDriver">
    <argument type="service">
        <argument type="service" id="doctrine.cache" />
        <service class="Doctrine\Common\Annotations\AnnotationReader">
            <call method="setDefaultAnnotationNamespace">
                <argument>Doctrine\ORM\Mapping\</argument>
            </call>
            <call method="setIgnoreNotImportedAnnotations">
                <argument>TRUE</argument>
            </call>
            <call method="setEnableParsePhpImports">
                <argument>FALSE</argument>
            </call>
        </service>
    </argument>
    <argument>%doctrine.entity.path%</argument>
</service>

我的问题是如何将以下内容添加到DIC配置中?

$reader = new \Doctrine\Common\Annotations\CachedReader(
    new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache()
);

1 个答案:

答案 0 :(得分:1)

它可能不是一个完全正常工作的配置,但应该给你一些提示:

<service id="annotations.base_reader" 
    class="Doctrine\Common\Annotations\AnnotationReader" 
    public="false">
        <call method="setDefaultAnnotationNamespace">
            <argument>Doctrine\ORM\Mapping\</argument>
        </call>
        <call method="setIgnoreNotImportedAnnotations">
            <argument>TRUE</argument>
        </call>
        <call method="setEnableParsePhpImports">
            <argument>FALSE</argument>
        </call>
    </argument>
</service>

<service id="annotations.indexed_reader" 
  class="Doctrine\Common\Annotations\IndexedReader" 
  public="false">
    <argument type="service" id="annotations.base_reader" />
</service>

<service id="annotations.cached_reader" 
  class="Doctrine\Common\Annotations\CachedReader">
    <argument type="service" id="annotations.indexed_reader" />
    <argument />
</service>

<service id="annotation_reader" alias="annotations.cached_reader" />    

<service id="doctrine.metadriver" class="Doctrine\ORM\Mapping\Driver\AnnotationDriver">
    <argument type="service" id="annotation_reader" />
    <argument>%doctrine.entity.path%</argument>
</service>