Dar*_*ius 8 php symfony doctrine-orm
我一直在关注教程,并且所有说明都表明它完全以相同的方式完成,但它似乎在Symfony 4中不起作用.是否有一些我忽略的东西或者捆绑包是不兼容的?
我跑了: composer require knplabs/knp-paginator-bundle
bundles.php由于Flex,它被自动加载到.
将以下内容插入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
Run Code Online (Sandbox Code Playgroud)
试图在控制器中使用以下内容:
$paginator = $this->get('knp_paginator');
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
未找到服务"knp_paginator":即使它存在于应用程序的容器中,"App\Controller\PhotoController"中的容器也是一个较小的服务定位器,只知道"doctrine","form.factory","http_kernel", "request_stack","router","security.authorization_checker","security.token_storage","serializer","session"和"twig"服务.除非您需要额外的懒惰,否则请尝试使用依赖注入.否则,您需要使用"PhotoController :: getSubscribedServices()"声明它.
mal*_*olm 22
你必须扩展Controller而不是AbstractController类:
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MyController extends Controller
{
public function myAction()
{
$paginator = $this->get('knp_paginator');
Run Code Online (Sandbox Code Playgroud)
或者更好地离开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()...
}
Run Code Online (Sandbox Code Playgroud)
就我而言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);
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11888 次 |
| 最近记录: |