如何在Symfony 2中更改默认的EntityRepository基类?

时间:2015-11-10 03:53:20

标签: php symfony doctrine-orm

如何在Symfony 2中更改默认的EntityRepository基类?

我在自定义捆绑包中创建了一个扩展的EntityRepository类:

namespace MyApp\Bundle\ORM;

use Doctrine\ORM\EntityRepository;

class MyAppEntityRepository extends EntityRepository
{

}

如何更改Symfony配置,以便它使用MyAppEntityRepository作为我所有实体的基本EntityRepository类?

3 个答案:

答案 0 :(得分:2)

如果您查看reference documentation for the Symfony Doctrine Bundle,您会看到default_repository_class选项。所以在你的config.yml文件中:

doctrine:
    orm:
        entity_managers:
            default:
                auto_mapping: true
                naming_strategy: doctrine.orm.naming_strategy.underscore
                default_repository_class: MyApp\Bundle\ORM\MyAppEntityRepository

这与Doctrine的默认config.yml设置略有不同,因此您必须将auto_mappingnaming_strategy选项移至其中 - 我已将其包含在内以上这些仅供参考,您问题的主要答案是default_repository_class选项。

答案 1 :(得分:0)

您可以在Entity类注释中指定自定义存储库类,例如:

// src/AppBundle/Entity/Product.php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Entity\ProductRepository")
 */
class Product
{
    //...
}

Doctrine的docs提供了更多相关信息。

答案 2 :(得分:0)

Doctrine\ORM\Configuration班级 on line 706 是一种方法getDefaultRepositoryClassName()。正如您在方法中看到的,它使用配置中的命名键defaultRepositoryClassName。因此,您可以使用以下密钥在doctrine配置中设置自定义存储库:

在Zend Framework 2中:

'doctrine' => array(
    'configuration' => array(
        'orm_default' => array(
            'default_repository_class' => 'My\Custom\DefaultRepository'
        )
    )
)

在Symfony

您的default_repository_class文件中的

config.yml

或者您可以获取Configuration个实例并使用setDefaultRepositoryClassName方法 from line 688 ,同时显示here in the documentation

$config->setDefaultRepositoryClassName($defaultRepository);