gpt4 book ai didi

symfony - 在实体对象中注入(inject)或访问服务容器

转载 作者:行者123 更新时间:2023-12-02 18:57:22 24 4
gpt4 key购买 nike

我想使用下面的实体访问服务容器,但如何访问?

检查了这个,但我在阅读听众时迷路了;

Controller

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');
}
}

最佳答案

@Ahmend 是正确的,因为您不应将容器注入(inject)实体中。在你的情况下,你可能会这样做:

// Controller
$order = ...find($orderId);
$currency = $this->getContainer()->getParameter('currency');
$price = $order->calculatePrice($currency);

因此货币作为方法参数传递。

我完全理解这是一个困难的概念,特别是如果一个人习惯了事件记录和大量全局变量。但最终它会有意义并产生更好的代码。

但是,为了不让您陷入困境,我将向您透露从任何地方访问容器的 secret 。原来应用程序内核是一个全局变量。所以:

class Orders
{
public function getCurrency()
{
global $kernel;
$container = $kernel->getContainer();
return $container->getParameter('currency');
}

关于symfony - 在实体对象中注入(inject)或访问服务容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25783094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com