php - Symfony2 并避免过于冗长的代码

标签 php symfony loose-coupling

在我的大多数 Controller 中,我需要获取对一个或多个自定义实体存储库的引用,因此很自然地,我经常这样做:

/** @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 所有其他 Controller 都可以继承它?

重构后的 Controller 代码将更像:

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

这也可以很好地与 IDE 自动完成和类型推断配合使用。

这是好的做法吗?或者它违反了某种标准?它是否使代码变得不那么“松散耦合”?

最佳答案

这个怎么样?

$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 违规问题...

关于php - Symfony2 并避免过于冗长的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797130/

相关文章:

cocoa-touch - 模型与 View Controller 通信的推荐方式是什么?

php - 使用 PHP 创建三列布局

symfony - 为什么我的错误没有出现在 Symfony2 表单上?

javascript - 如何将数组作为函数参数从 php 发送到 javascript

php - Symfony 和学说坚持复杂的数据库

git - 如何在没有完整项目的情况下测试共享的 Symfony 2 Bundle

php - Laravel4 IOC容器的好处

asp.net-mvc-3 - MVC 3 将实体作为接口(interface)传递

php - 确定变量是否是 PHP 中一组变量中最小的

php - 无法在 PHP 中更新数据透视表