Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ajax查询后如何更新knppaginatorbundle的分页模板_Ajax_Symfony_Pagination - Fatal编程技术网

ajax查询后如何更新knppaginatorbundle的分页模板

ajax查询后如何更新knppaginatorbundle的分页模板,ajax,symfony,pagination,Ajax,Symfony,Pagination,Im使用knppaginatorbundle创建分页。我已经创建了一个jquery代码来使用ajax选择数据 当我点击页码时一切正常,内容加载了正确的数据。 但是我有一个问题,ajax查询后分页模板没有改变: “上一个链接”和“下一个链接”值必须更改 必须禁用当前页面 还有其他需要做的改变 我该怎么做 public function listAction($page, Request $request) { $em = $this->getDoctrine()->getM

Im使用knppaginatorbundle创建分页。我已经创建了一个jquery代码来使用ajax选择数据

当我点击页码时一切正常,内容加载了正确的数据。 但是我有一个问题,ajax查询后分页模板没有改变:

  • “上一个链接”和“下一个链接”值必须更改
  • 必须禁用当前页面
  • 还有其他需要做的改变
我该怎么做

public function listAction($page, Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $paginator = $this->get('knp_paginator');
    $qb = $em->getRepository('AppBundle:Travel')->getListTravels();
    $pagination = $paginator->paginate(
        $qb, $request->query->get('page', $page), 3
    );

    //ajax request
    if ($request->isXmlHttpRequest()) {

        $view = $this->renderView('@App/Frontend/Travel/list.html.twig', array(
            'pagination' => $pagination
        ));

        $response = new JsonResponse(array('ok' => $view));
        return $response;
    }

    return $this->render('AppBundle:Frontend/Travel:travel-list-view.html.twig', array(
        'pagination' => $pagination,
    ));
}
我已将attr数据目标添加到分页模板,如下所示:

<a data-target="{{ page  }}" href="{{ path(route, query|merge({(pageParameterName): page})) }}">{{ page }}</a>

如果其他人需要解决方案,有两种方法

  • 你可以用那个包

  • 您应该在控制器中构建新的分页字符串,并将其作为参数发送到
    JsonResponse
    。然后在成功时通过jQuery替换DOM中的分页元素

  • 对于SF 4.3,您可以使用我的方法

  • 要能够在控制器中插入
    处理器
    ,您必须在
    服务中添加自动连线别名。yaml
  • 基于注入的
    PaginatorInterface
    您应该构建
    $pagination
    对象(
    PaginationInterface

  • 使用
    Processor
    为细枝构建上下文数组

  • render方法需要
    SlidingPagination
    对象,但得到了
    $pagination
    ,这是
    PaginationInterface
    ——不过看起来还可以

  • 获取细枝并渲染最后一个字符串
  • 工作控制器示例

    if ($request->isXmlHttpRequest()) {
        $view = $this->render('@App/Frontend/Travel/list.html.twig', array(
            'pagination' => $pagination
        ))->getContent();
        $paginationContext = $processor->render($pagination);
        $twig = $this->get('twig');
        $paginationHtml = $twig->render($pagination->getTemplate(), $paginationContext);
        $response = new JsonResponse(['view' => $view, 'paginationHtml' => $paginationHtml]);
        return $response;
    }
    
    然后在jQuery中

    success: function (msg) {
        if (msg["ok"] === undefined) {
            alert('error');
        } else {
            $("#mydiv").html(msg["view"]);
            $("#myDivContainingPagination").html(msg["paginationHtml"])
        }
    }
    

    knppaginatorbundle不是设计用来通过javascript更新的。那么我该怎么办呢?我不知道,但可能会使用像jPaginate这样的javascript库:
    Knp\Bundle\PaginatorBundle\Helper\Processor: '@knp_paginator.helper.processor'
    
    $paginationContext = $processor->render($pagination);
    
    $twig = $this->get('twig');
    $paginationString = $twig->render($pagination->getTemplate(), $paginationContext);
    
    if ($request->isXmlHttpRequest()) {
        $view = $this->render('@App/Frontend/Travel/list.html.twig', array(
            'pagination' => $pagination
        ))->getContent();
        $paginationContext = $processor->render($pagination);
        $twig = $this->get('twig');
        $paginationHtml = $twig->render($pagination->getTemplate(), $paginationContext);
        $response = new JsonResponse(['view' => $view, 'paginationHtml' => $paginationHtml]);
        return $response;
    }
    
    success: function (msg) {
        if (msg["ok"] === undefined) {
            alert('error');
        } else {
            $("#mydiv").html(msg["view"]);
            $("#myDivContainingPagination").html(msg["paginationHtml"])
        }
    }