繁体   English   中英

在 EntityRepository 中获取 Symfony 容器

[英]Get Symfony Container in an EntityRepository

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

我应该如何到达容器?

谢谢 :)

兄弟,Symfony 有时或很多时候是一个令人头疼的问题,这里是一种hacky 方式,不像@Tuong Le 的答案那样正确,但是对于像@keyboardSmasher 所说的变量来说,这是一个可怕的事情。

在函数/方法的开头:

global $kernel;
if($kernel instanceOf \AppCache) $kernel = $kernel->getKernel();

所以你可以访问一个容器

$kernel->getContainer();

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

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

如果您尝试从 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);
        }             
    }
}

如果你真的只需要向服务传递一个参数,你可以在不需要管理器的情况下传递它,比如:

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

如果您定义了自定义存储库方法,您可以像往常一样从 Controller 中检索您的变量,并将其传递给 EntityRepository。 例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM