我想访问以下实体的服务容器,但是如何?
检查了这一点但是当我在读听众时我迷路了;
控制器
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');
}
}
答案 0 :(得分:6)
@Ahmend是正确的,因为你不应该将容器注入实体。在您的情况下,您可能会执行以下操作:
// Controller
$order = ...find($orderId);
$currency = $this->getContainer()->getParameter('currency');
$price = $order->calculatePrice($currency);
因此货币作为方法参数传递。
我完全理解这是一个困难的概念,特别是如果一个用于活动记录和大量的全局变量。但最终它会有意义并产生更好的代码。
然而,只是让你不被卡住,我会告诉你从任何地方访问容器的秘密。事实证明,app内核是一个全局变量。所以:
class Orders
{
public function getCurrency()
{
global $kernel;
$container = $kernel->getContainer();
return $container->getParameter('currency');
}
答案 1 :(得分:1)
正如the link you shared:An entity is a data model and should only hold data (and not have any dependencies on services)
中所述。然后你应该找到另一种干净的方式去做你想做的事。
根据您的代码,可以假设您的配置中定义了currency
的值(除非您以container
的其他方式注入它)。 不相关肯定会将其严格限制在您的某个实体中。