在EntityRepository中获取Symfony Container

时间:2012-04-01 01:25:32

标签: php symfony

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

我应该如何到达容器?

谢谢:)

5 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:10)

兄弟,Symphony有时候或很多次都很头疼,这是一种hacky方式,不像@Tuong Le的回答那样正确,但对于像@keyboardSmasher这样的变量来说,恐惧是很多的。

在函数/方法的开头,你可以这样做:

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

因此您可以使用

访问容器
$kernel->getContainer();

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

答案 2 :(得分: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);
        }             
    }
}

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

如果你真的只需要将一个参数传递给服务,你可以在不需要经理的情况下传递它,例如:

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