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正是我想要的:)谢谢