Symfony 实体对象内的注入或访问服务容器
我想使用下面的实体访问服务容器,但如何访问 检查了这个,但是我在读听众的时候迷路了Symfony 实体对象内的注入或访问服务容器,symfony,doctrine-orm,Symfony,Doctrine Orm,我想使用下面的实体访问服务容器,但如何访问 检查了这个,但是我在读听众的时候迷路了 控制器 public function indexAction() { $orders = $this->getDoctrine()->getManager()->getRepository('MyAdminBundle:Orders')->findAll(); ..... } 实体 namespace My\AdminBundle\Entity; class Ord
public function indexAction()
{
$orders = $this->getDoctrine()->getManager()->getRepository('MyAdminBundle:Orders')->findAll();
.....
}
实体
namespace My\AdminBundle\Entity;
class Orders
{
private $container;
public function __constructor()
{
$this->container = ??????
}
public function getCurrency()
{
return $this->container->getParameter('currency');
}
}
如中所述:实体是一个数据模型,应该只保存数据(而不依赖于服务)
。然后你应该找到另一种干净的方法来做你想做的事情
根据您的代码,可以假设
currency
的值是在您的配置中定义的(除非您以其他方式将其注入容器中)。将它与您的一个实体紧密连接肯定是不相关的。@Ahmend是正确的,您不应该将容器注入实体。在您的情况下,您可以执行以下操作:
// Controller
$order = ...find($orderId);
$currency = $this->getContainer()->getParameter('currency');
$price = $order->calculatePrice($currency);
因此,货币作为方法参数传递
我完全理解,这是一个困难的概念,尤其是如果一个人习惯于活动记录和大量的全球记录。但最终它会有意义并产生更好的代码
但是,为了不让您陷入困境,我将向您揭示从任何地方访问容器的秘密。事实证明,应用程序内核是一个全局变量。因此:
class Orders
{
public function getCurrency()
{
global $kernel;
$container = $kernel->getContainer();
return $container->getParameter('currency');
}
问题是我该怎么做?是否有您知道的示例,以便我可以通过?使用货币作为配置参数,(如果需要,将其注入服务,…等等)。这里的问题是,为什么您认为需要将其添加到实体中?用例是什么?我有一些数据存储在一个app/config/site_globals.yml中,需要在上面的实体中读取。这就是全部目的。global$kernel代码>正是我想要的:)谢谢