在EntityRepository中获取Symfony Container

Mar*_*cía 8 php symfony

我在parameters.ini中设置了一个变量,但现在我想从EntityRepository中检索该变量并且$this->container未设置,所以我不能这样做

我该怎么去集装箱?

谢谢 :)

Tuo*_* Le 10

您不应该在EntityRepository中使用$ container.而是创建一个Model Manager服务并通过DI注入容器.

  • 好的Gawd!他只需要容器中的"一个"变量.我发誓一些程序员试图让最简单的任务尽可能复杂和复杂.只需从控制器中的容器中获取参数,然后将其"注入"自定义存储库方法即可.使用你在公园散步的时间,闻到玫瑰的味道.吉兹.我不想看你怎么杀苍蝇. (29认同)
  • 我在哪里可以找到更多相关信息?谢谢顺便说一下 (2认同)
  • 看一下像FOSUserBundle这样的一些软件包...这是我的模型管理器的一个示例:https://gist.github.com/2271046然后你可以定义服务<service>并将service_container服务注入`code` < service id ="test.manager"class ="YourModelManager"> <argument type ="service"id ="your_entity_manager"/> <argument>您的实体类</ argument> <call method ="setContainer"> <argument type = "service"id ="service_container"/> </ call> </ service> (2认同)

Fel*_*oni 10

兄弟,交响乐有时候或很多次都很头疼,这里是一种hacky方式,不像@Tuong Le的回答那样正确,但对于像@keyboardSmasher这样的变量来说,这是一件非常恐怖的事情.

在函数/方法的开头,您可以:

global $kernel;
if($kernel instanceOf \AppCache) $kernel = $kernel->getKernel();
Run Code Online (Sandbox Code Playgroud)

所以你可以访问一个容器

$kernel->getContainer();
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

例如:

class CustomRepository extends EntityRepository
{
    public function myCustomFunction()
    {
        $conn = $this->getEntityManager()->getConnection();
        $stmt = $conn->query($sql);
        if ($stmt)
        {
            while ($row = $stmt->fetch())
                var_dump($row);
        }             
    }
}
Run Code Online (Sandbox Code Playgroud)