Использование knp_paginator в моем собственном сервисе

Я пытаюсь использовать knp_paginator в моем собственном сервисе, но я получаю эту ошибку

ServiceNotFoundException в CheckExceptionOnInvalidReferenceBehaviorPass.php строка 58: Служба «paginatorservice» зависит от несуществующей службы «knp_paginator».

Это мой сервис:

namespace CommonBundle\Service;

use Doctrine\ORM\EntityManager;

class PaginatorService
{

public function paginate($query, $pageLimit, $pageNumber)
{

$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query,
$request->query->getInt('page', $pageNumber),
$pageLimit
);

return $pagination;
}

}

мой сервис.

paginatorservice:
class: CommonBundle\Service\PaginatorService
arguments:
entityManager: [ "@doctrine.orm.entity_manager", "@knp_paginator "]

В моем контроллере отлично работает paginator, но я хочу сделать его сервисом, чтобы я мог повторно использовать код.

0

Решение

Вы должны внедрить их в __construct вашего сервиса:

$private $em;
$private $paginator;
public function __contruct($em, $paginator){
$this->em = $em;
$this->$paginator = $paginator;
}

И изменить:

paginatorservice:
class: CommonBundle\Service\PaginatorService
arguments: [ "@doctrine.orm.entity_manager", "@knp_paginator"]

Надеюсь, поможет.

3

Другие решения

Я понял.

В service.yml мне нужно передать 3 аргумента: entitymanager, knp_paginator и request_stack, поскольку запрос будет использоваться в сервисе.

paginatorservice:
class: CommonBundle\Service\PaginatorService
arguments: [ "@doctrine.orm.entity_manager", "@knp_paginator","@request_stack"]

Мой класс обслуживания теперь выглядит следующим образом.

namespace CommonBundle\Service;

use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\RequestStack;

class PaginatorService
{

private $em;
private $paginator;
protected $requestStack;

public function __construct(EntityManager $em, $paginator,RequestStack $requestStack)
{
$this->em = $em;
$this->paginator = $paginator;
$this->requestStack = $requestStack;
}

public function paginate($query, $pageLimit, $pageNumber)
{
$request = $this->requestStack->getCurrentRequest();

$pagination = $this->paginator->paginate(
$query,
$request->query->getInt('page', $pageNumber),
$pageLimit
);

return $pagination;
}

}
2

По вопросам рекламы [email protected]