Symfony2并避免过于冗长的代码

时间:2013-11-05 19:24:12

标签: php symfony loose-coupling

在我的大多数控制器中,我需要获得对一个或多个自定义实体存储库的引用,所以很自然地,我做了很多:

/** @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 个答案:

答案 0 :(得分: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解决了所有DRY违规行为......

答案 1 :(得分:1)

我建议使用Model Manager方法。然后,您可以使用JMSDiExtraBundle来更轻松地进行实例化。

注意:如果您使用的是Symfony 2.2,那么您可能已经安装了JMSDiExtraBundle,因为它是该版本标准发行版的一部分。