Symfony 4 - KnpPaginator Bundle"服务未找到,即使它存在于应用程序的容器中#34;

时间:2018-02-12 05:32:24

标签: php symfony doctrine-orm

我一直在关注教程,并且所有说明都表明它完全按照相同的方式完成,但它似乎无法在Symfony 4中运行。有什么我可以忽视或者是捆绑只是不兼容?

我跑了:composer require knplabs/knp-paginator-bundle

由于Flex。它被自动加载到bundles.php

将以下内容插入config/services.yaml

knp_paginator:
    page_range:                 5          # default page range used in pagination control
    default_options:
        page_name:              page       # page query parameter name
        sort_field_name:        sort       # sort field query parameter name
        sort_direction_name:    direction  # sort direction query parameter name
        distinct:               true       # ensure distinct results, useful when ORM queries are using GROUP BY statements
    template:
        pagination: KnpPaginatorBundle:Pagination:twitter_bootstrap_v3_pagination.html.twig     # sliding pagination controls template
        sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig                         # sort link template

试图在控制器中使用以下内容:

$paginator  = $this->get('knp_paginator');

并收到以下错误:

  

服务" knp_paginator"找不到:即使它存在于应用程序的容器中,容器内部" App \ Controller \ PhotoController"是一个较小的服务定位器,只知道" doctrine"," form.factory"," http_kernel"," request_stack",&# 34; router"," security.authorization_checker"," security.token_storage"," serializer"," session"和" twig"服务。除非您需要额外的懒惰,否则请尝试使用依赖注入。否则,您需要使用" PhotoController :: getSubscribedServices()"来声明它。

4 个答案:

答案 0 :(得分:19)

您必须扩展Controller而不是AbstractController类:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class MyController extends Controller
{

    public function myAction()
    {
        $paginator  = $this->get('knp_paginator');

或更好地离开AbstractController并为您的行动注入knp_paginator服务:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Knp\Component\Pager\PaginatorInterface;

class MyController extends AbstractController
{

    public function myAction(PaginatorInterface $paginator)
    {
        $paginator->paginate()...
    }

答案 1 :(得分:6)

在我的情况下,我使用AbstractController并且正如malcolm所说,直接在您的操作中直接注入服务,即使如此,我多次调用一个方法,我认为覆盖{{ 1}}对我的porpuse更清楚。

getSubscribedServices

答案 2 :(得分:1)

正如文档中所述。您必须扩展基类Controller类,或使用依赖注入而不是https://symfony.com/doc/current/service_container.html#service-parameters

答案 3 :(得分:0)

在我使用的是symfony 4.3的情况下,我只是将类作为参数注入到方法中,然后就完成了。

.image-container img {
  width:auto;
  height:100%;
}