Внедрение репозиториев в Factory Symfony2

Я изучаю концепцию внедрения услуг в рамках Symfony2. Я настроил это. Репозиторий, Фабрика, Контроллер. Я пытаюсь внедрить репозиторий в фабрику, чтобы создать объекты для моего контроллера для обработки.

Я настроил файл services.xml, в котором я пытаюсь объявить свой сервис, и я предполагаю, что именно здесь я ошибаюсь.

Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' with message 'The service "joint.venture.postcode.factory" has a dependency on a non-existent service

Мой репозиторий:

class Postcode {

private $postcode;
private $paf;

public function setPostcode($postcode)
{
$this->postcode = $postcode;
}

public function getPostcode()
{
return $this->postcode;
}

public function setPaf($paf)
{
$this->paf = $paf;
}

public function getPaf()
{
return $this->paf;
}
}

Моя фабрика

use Test\Bundle\Repository\Postcode;

class PostcodeFactory
{

private $postcode;

public function __construct(
Postcode $postcode
){
$this->postcode = $postcode;
}

public function test()
{
return $this->setPostcode('Hello');
}

}

мои услуги:

<service id="test.postcode.factory"class="Test\Bundle\Factory\PostcodeFactory">

<argument type="service" id="repository.postcode"/>
</service>

Anayone видит что-то не так ..?

0

Решение

repository.postcode не существует как услуга.

Как правило, это немного сложно сделать, потому что Repos получают от EntityManager

Я обычно предпочитаю вводить EM, а затем просить его для репозиториев

0

Другие решения

Вам необходимо зарегистрировать свой репозиторий как сервис, прежде чем вы сможете добавить его в другой сервис.

<service id="repository.postcode"class="Test\Bundle\Repository\Postcode">
<factory service="doctrine.orm.entity_manager" method="getRepository" />
<argument>Test\Bundle\Entity\Postcode</argument>
</service>
0

К сожалению. Похоже, @ Джерри победил меня. И он использует XML. Ну что ж.

Вот пример определения хранилища как службы. Как и с большинством вещей, все сразу, как только вы сделали несколько. Я использую yaml вместо xml, но концепция та же. Я также хотел бы назвать псевдоним менеджера сущностей, но это не обязательно.

cerad_user.entity_manager.doctrine:
alias: doctrine.orm.default_entity_manager

cerad_user.user_repository.doctrine:
class:  Cerad\Bundle\UserBundle\Entity\UserRepository
factory_service: 'cerad_user.entity_manager.doctrine'
factory_method:  'getRepository'
arguments:
- 'Cerad\Bundle\UserBundle\Entity\User'

Если все ваши сервисные потребности — это репозиторий, то внедрение репозитория будет чище, чем внедрение всего менеджера сущностей. По крайней мере, по моему не очень скромному мнению.

0
По вопросам рекламы [email protected]