Н.Б. Я не используя платформу Symfony. Я использую контейнерный компонент Symfony вместе с Doctrine ORM
, Я создал собственное репо и хочу зарегистрировать его как сервис. Я не использую какие-либо рамки.
class FooRepository extends EntityRepository
{
//...
}
Вот что я возиться в контейнере:
<services>
<!--<service id="doctrine" class="Doctrine\ORM\Repository\DefaultRepositoryFactory" />-->
<!--<service id="entity_manager" class="Doctrine\ORM\EntityManager"/>--><service id="doctrine" class="Doctrine\ORM\EntityManager"/>
<service id="app.org_1_repository" class="Doctrine\ORM\EntityRepository">
<factory service="doctrine" method="getRepository"/>
<argument type="string">Foo\Bar\Entity\MyEntity</argument>
</service>
</services>
Ошибка: необработанное исключение «ReflectionException» с сообщением «Доступ к непубличному конструктору класса Doctrine \ ORM \ EntityManager».
Ошибка имеет смысл. Я думаю, что я был ближе с (сейчас прокомментировал) DefaultRepositoryFactory
подход, но не мог заставить это работать.
Решить эту проблему не очень понятно, много исследовав. 99% ответов относятся к Symfony.
Я решил это, определив менеджер сущностей в контейнере следующим образом:
<service id="doctrine.xml_configuration">
<factory class="Doctrine\ORM\Tools\Setup" method="createXMLMetadataConfiguration" />
<argument id="doctrine.xml_config_path" type="collection">
<argument>path/to/mappings</argument>
</argument>
<argument id="is_dev_mode">dev_mode</argument>
</service>
<service id="doctrine.em">
<factory class="Doctrine\ORM\EntityManager" method="create"/>
<argument type="collection">
<argument key="driver">your_driver</argument>
<argument key="host">your_host</argument>
<argument key="dbname">your_db</argument>
<argument key="user">your_user</argument>
<argument key="password" type="string">your_password</argument>
</argument>
<argument type="service" id="doctrine.xml_configuration"/>
</service>
Теперь я могу использовать менеджер сущностей по мере необходимости.
Других решений пока нет …