我一直在学习教程,所有的说明都表明它是以完全相同的方式完成的,但在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”中的容器是一个较小的服务定位器,只知道“原则”、"form.factory“、"http_kernel”、"request_stack“、”路由器“、"security.authorization_checker”、"security.token_storage“、”序列化器“、”会话“和"twig”服务。除非你需要额外的懒惰,试着用依赖注入代替。否则,您需要使用"PhotoController::getSubscribedServices()“来声明它。
发布于 2018-02-12 06:26:02
您必须扩展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()...
}发布于 2018-04-08 15:50:21
在我的例子中,我使用AbstractController,正如malcolm所说,在您的操作中直接注入服务是更好的选择,即便如此,我还是多次调用一个方法,并且我认为覆盖getSubscribedServices对于我的工作来说是更紧密的。
public static function getSubscribedServices(): array
{
$services = parent::getSubscribedServices();
$services['fos_elastica.manager'] = RepositoryManagerInterface::class;
$services['knp_paginator'] = PaginatorInterface::class;
return $services;
}
private function listHandler(Search $search, Request $request, int $page): Response
{
//...
$repository = $this->container->get('fos_elastica.manager')->getRepository(Foo::class);
//...
}发布于 2018-05-29 09:53:12
就像文件里说的。您必须扩展基类Controller类,或者使用依赖项注入代替container.html#service-parameters。
https://stackoverflow.com/questions/48740064
复制相似问题