在我自己的服务中使用 knp_paginator

Posted

技术标签:

【中文标题】在我自己的服务中使用 knp_paginator【英文标题】:Using knp_paginator within my own service 【发布时间】:2017-08-25 07:55:49 【问题描述】:

我正在尝试在自己的服务中使用 knp_paginator,但出现此错误

CheckExceptionOnInvalidReferenceBehaviorPass.php 第 58 行中的 ServiceNotFoundException:服务“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;
  


我的 service.yml:

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

分页器在我的控制器中工作正常,但我想让它成为服务,以便我可以重用代码。

【问题讨论】:

您的service.yml 中有一个多余的空格,在"@knp_paginator " 中,删除r" 之间的空格 【参考方案1】:

您应该将它们注入到您的服务的 __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"]

希望对你有帮助。

【讨论】:

我仍然得到同样的错误,也许我忘记了使用语句或什么? 记住我在问题中评论的空格! 您是否尝试删除缓存?【参考方案2】:

我想通了。

在 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;
    


【讨论】:

以上是关于在我自己的服务中使用 knp_paginator的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 knp_paginator 将锚点附加到 url

在我自己的 Web 应用程序中使用 passportjs 管理单点登录 - 共享登录

如何在我自己的自定义视图中重现 iPhone UIScrollView 的轻弹滚动行为?

在我自己的自定义 appSettings 上使用 foreach 所需的代码

用于自定义日历的 CalDav 服务器

websocket 服务器找不到类 mysqli。如何在我自己的 websocket 服务器中使用 mysql 数据库连接? [复制]