Php 在EntityRepository中获取Symfony容器

Php 在EntityRepository中获取Symfony容器,php,symfony,Php,Symfony,我在parameters.ini中设置了一个变量,但现在我想从EntityRepository中检索该变量,$this->container未设置,因此我无法执行此操作 我该怎么去集装箱 谢谢:)您不应该在EntityRepository中使用$container。相反,创建一个模型管理器服务并通过DI注入容器 如果定义自定义存储库方法,则可以像往常一样从控制器检索变量,并将其传递给EntityRepository。例如: public function findAllOrderedByFoo(

我在parameters.ini中设置了一个变量,但现在我想从EntityRepository中检索该变量,
$this->container
未设置,因此我无法执行此操作

我该怎么去集装箱


谢谢:)

您不应该在EntityRepository中使用$container。相反,创建一个模型管理器服务并通过DI注入容器

如果定义自定义存储库方法,则可以像往常一样从控制器检索变量,并将其传递给EntityRepository。例如:

public function findAllOrderedByFoo($your_variable)
{
    //use $your_variable here

    return $this->getEntityManager()
        ->createQuery(  your SQL here   )
        ->getResult();
}

如果您试图从EntityRepository类访问DBAL,可以使用$this->getEntityManager()->getConnection()来获取它

例:


兄弟,Symfony有时或很多时候是一个头痛的问题,这里有一个老生常谈的方法,不是像@tuongle答案那样正确,而是一个恐怖的问题,就像was说的@keyboardSmasher一样

在函数/方法的开头:

global $kernel;
if($kernel instanceOf \AppCache) $kernel = $kernel->getKernel();
因此,您可以使用

$kernel->getContainer();

希望这能给你时间去公园散步=),

如果你真的只需要向服务传递一个参数,你可以直接传递,而不需要经理,比如:

services:
    your_service:
        class: YourServiceClass
        arguments: [%some.parameter%]

我也想过,但是。。。我真的认为必须有另一种方法来做它看看一些捆绑包,比如FOSUserBundle。。。下面是我的模型管理器的一个示例:然后您可以定义一个服务,并将服务容器服务注入到您的实体类
code
如果我有多个模型,比如一个用于产品,一个用于用户,我应该添加一个单独的服务?因为这看起来很痛苦对于每个模型管理器,您不需要为每个模型管理器添加这些配置。您可以创建一个抽象模型管理器,然后让其他模型管理器扩展抽象模型管理器。在服务配置中,您将创建具有服务配置的父服务,其他服务将扩展父服务。请在这里查看更多信息:好棒!他只需要容器中的“一个”变量。我发誓,一些程序员试图使最简单的任务尽可能复杂复杂。只需从控制器中的容器中获取参数,并将其“注入”到自定义存储库方法中。利用你节省下来的时间在公园里散步,闻一闻玫瑰花香。哎呀。我讨厌看你怎么杀苍蝇。我同意@keyboard smasher。我过去喜欢Symfony,但为了从一个点到另一个点获取对象而必须创建服务似乎是一个巨大的PITA。我越是需要用这个过于复杂的框架来编写代码,我就越希望我在开始编写这个框架时花时间学习node。太棒了!(y)
services:
    your_service:
        class: YourServiceClass
        arguments: [%some.parameter%]