[英]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.