Symfony2 и избегать слишком многословного кода

В большинстве моих контроллеров мне нужно получить ссылку на один или несколько моих пользовательских репозиториев, поэтому, естественно, я делаю это много:

/** @var $repo MyFirstEntityRepository */
$repo1 = $this->getDoctrine()->getManager()->getRepository('MyNamespaceMyBundle:MyFirstEntity');
/** @var $repo MySecondEntityRepository */
$repo2 = $this->getDoctrine()->getManager()->getRepository('MyNamespaceMyBundle:MySecondEntity');
/** @var $repo MyThirdEntityRepository */
$repo3 = $this->getDoctrine()->getManager()->getRepository('MyNamespaceMyBundle:MyThirdEntity');

У меня такой вопрос: если у меня есть несколько разных сущностей, для которых мне нужна ссылка на репозиторий, целесообразно ли создавать группу соответствующих get[EntityName]Repository методы в некотором роде BaseController от которого все другие контроллеры могут наследовать?

Реорганизованный код контроллера будет больше похож на:

$repo1 = $this->getMyFirstEntityRepository();
$repo2 = $this->getMySecondEntityRepository();
$repo3 = $this->getMyThirdEntityRepository();

Что бы хорошо сочеталось с автозаполнением IDE и выводом типа.

Это хорошая практика? Или это нарушает какой-то стандарт? Это делает код менее "слабо связанным"?

2 ответа

Решение

Как насчет этого?

$em = $this->getDoctrine()->getManager();
/** @var $repo MyFirstEntityRepository */
$repo1 = $em->getRepository('MyNamespaceMyBundle:MyFirstEntity');
/** @var $repo MySecondEntityRepository */
$repo2 = $em->getRepository('MyNamespaceMyBundle:MySecondEntity');
/** @var $repo MyThirdEntityRepository */
$repo3 = $em->getRepository('MyNamespaceMyBundle:MyThirdEntity');

Мне кажется объявление переменной $em решает все СУХИЕ нарушения...

Я бы предложил подход Model Manager. Затем вы можете, в свою очередь, использовать JMSDiExtraBundle, чтобы сделать создание еще проще.

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

Другие вопросы по тегам