2015-11-10 5 views
0

Как изменить базовый класс EntityRepository по умолчанию в Symfony 2?Как изменить базовый класс EntityRepository по умолчанию в Symfony 2?

Я создал расширенный класс EntityRepository в моем пользовательском пачке:

namespace MyApp\Bundle\ORM; 

use Doctrine\ORM\EntityRepository; 

class MyAppEntityRepository extends EntityRepository 
{ 

} 

Как изменить конфиг Symfony так, что он использует MyAppEntityRepository в качестве базового класса EntityRepository для всех моих сущностей?

+0

с командой генератора? – Matteo

+0

Нет в конфигурации? – GeekTantra

ответ

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 

Это немного изменения от настройки по умолчанию config.yml для доктрины, так что вы должны были бы переместить auto_mapping и naming_strategy варианты в там, как хорошо - я включил эти выше для справки, основной ответ на ваш вопрос: default_repository_class.

0

Вы можете указать пользовательский класс хранилища в классе аннотаций Entity и т.д .:

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

use Doctrine\ORM\Mapping as ORM; 

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

Доктрина-х docs предоставляет больше информации по этому вопросу.

+0

Я хотел, чтобы он был глобальным по всем объектам без явной настройки на каждой из конфигураций Entity. – GeekTantra

0

В Doctrine\ORM\Configuration класса on line 706 представляет собой метод getDefaultRepositoryClassName(). Как вы можете видеть в методе, он использует именованный ключ defaultRepositoryClassName из конфигурации. Таким образом, вы можете настроить свой собственный репозиторий в доктрине конфигурации с помощью этого ключа:

В Zend Framework 2:

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

В Symfony:

default_repository_class ключа в файле config.yml


Или вы можете получить Configuration экземпляр и использовать метод setDefaultRepositoryClassNamefrom line 688 а также показано here in the documentation:

$config->setDefaultRepositoryClassName($defaultRepository); 
Смежные вопросы