嗨,我想注入一个服务类而不调用她的构造函数,请注意我还没有将参数传递给这个构造函数类注入。
例:
services:
your.service.name:
class: AppBundle\Services\YourClassName
arguments: ['@doctrine.services.paginator']
doctrine.services.paginator:
class: Doctrine\ORM\Tools\Pagination\Paginator
public: false
返回错误
类型错误:函数参数太少 Doctrine \ ORM \ Tools \ Pagination \ Paginator :: __ construct(),0传入 ......至少有1个预期的
答案 0 :(得分:1)
在不使用构造函数的情况下实例化类有点困难,
PHP文档说:
PHP 5允许开发人员为类声明构造函数方法。具有构造函数方法的类在每个新创建的对象上调用此方法,因此它适用于对象在使用之前可能需要的任何初始化。
如果要在不注入依赖关系的情况下使用paginator,可以按照doctrine文档进行操作:
Doctrine paginator documentation
基本上,您在存储库中插入use语句。
use Doctrine\ORM\Tools\Pagination\Paginator;
然后在查询中使用Paginator类的对象:
$qb = $this->CreateQueryBuilder('u');
// ... build your query here...
$qb->getQuery();
$paginator = new Paginator($qb, false);
$count = count($paginator);
return array($paginator, $count); // Process the results in your controller
希望这有帮助
答案 1 :(得分:1)
你可以使用setter注入,这是可选的,并不是真的推荐,但我不会深入研究。
示例:
<?php
class YourClassName
{
private $paginator;
public function setPaginator(PaginatorInterface $paginator)
{
$this->paginator = $paginator;
}
public function getPaginator()
{
if ($this->paginator instanceof PaginatorInterface) {
return $this->paginator;
}
throw new \RuntimeException('Paginator is not defined');
}
}
然后您可以在不指定paginator作为参数的情况下注入您的服务:
services:
your.service.name:
class: AppBundle\Services\YourClassName
而是将其注入运行时:
$this->get('your.service.name')->setPaginator($paginator);
如果你需要使用容器注入paginator,你可以使用calls
参数和service more in docs。
如果每次从容器获得服务时都需要获取新实例,则可以使用shared
参数more in docs。