我在parameters.ini中设置了一个变量,但是现在我想从EntityRepository中检索该变量,并且$this->container
未设置,所以我不能这样做
我应该如何到达容器?
谢谢:)
答案 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%]