KNP寻呼链接卡在第1页



大家晚上好,

事实上,我正在把我的symfony2网站推到网上,我遇到了一些问题。我已经设置了knp-paginator捆绑包,并遵循了他们关于安装的说明。但事实是,我的分页不起作用,因此它只显示第一页上出现的项目。当我点击next/page2时,url的行为似乎是正确的,但页面在第一次显示时仍然"冻结"。

这是我的代码(我已经为自动加载器和内核中的不同捆绑包设置了所有配置):

// Controller/HomeController.php (used for the homepage)
<?php
namespace PfBundleBlogBundleController;
use SymfonyBundleFrameworkBundleControllerController;

class HomeController extends Controller
{
    public function indexAction()
    {
        $em    = $this->get('doctrine.orm.entity_manager');
        $dql   = "SELECT a FROM PfBlogBundle:Projects a ORDER by a.id DESC";
        $query = $em->createQuery($dql);
        $paginator  = $this->get('knp_paginator');
        $pagination = $paginator->paginate(
            $query,
            $this->get('request')->query->get('page', 1)/*page number*/,
            8/*limit per page*/
         );

        return $this->render('PfBlogBundle:Default:home.html.twig', array('pagination'=>$pagination));
      }
}

和树枝

// Default/home.html.twig
{% extends '::home.html.twig'%}
{% block body %}
<div id="works">
<div class="container">
    <div class="row-fluid">
       <div class="span12">
        {% for project in pagination %}
            <div class="span3">
                <div class="workBlocks">
                    <img src="{{ project.thumbnail }}" />
                    <div class="workCaption">
                        <h3>{{ project.title }}</h3>
                        <a href="{{ path('pf_blog_project', {'id': project.id}) }}">See</a>
                    </div><!-- end workCaption -->
                </div><!-- end workBlocks -->
            </div><!-- end span3 -->
        {% endfor %}
        </div>

        {# display navigation #}
        {{ knp_pagination_render(pagination) }}

    </div><!-- end row -->
</div>
</div><!-- end works -->
{% endblock %}

我看不出我错在哪里了。非常感谢所有的帮助;)

编辑:

// this is the route I want to use...
pf_blog_index:
    path:  /
    defaults: { _controller: PfBlogBundle:Home:index }

(编辑)好吧,在这里我将继续提供更多的细节,因为我不知道出了什么问题:

因此,在我的供应商中,我有以下文件夹结构

knplabs:

  • knp组件
  • knp菜单
  • knp菜单包
  • knp分页器丛

在检查了我的自动加载和AppKernel之后,我有了关于文档的需要。。

在我的composer.json:中

"require": {
    "knplabs/knp-components": "1.2.*@dev",
    "knplabs/knp-menu-bundle": "2.0.*@dev",
    "knplabs/knp-paginator-bundle": "dev-master"
},

app/autoload.php中我有

$loader->registerNamespaces(array(
    'Knp\Component'      => __DIR__.'/../vendor/knp-components/src',
    'Knp\Bundle'         => __DIR__.'/../vendor/bundles',
));

最后,在我的AppKernel.php

$bundles = array(
            new KnpBundleMenuBundleKnpMenuBundle(),
            new KnpBundlePaginatorBundleKnpPaginatorBundle(),
        );

编辑:

这里还有我在app/config.yml中的设置

knp_paginator:
    page_range: 3                      # 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_pagination.html.twig     # sliding pagination controls template
        sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template

好的,所以我找到了问题的一个解决方案。事实上,正如我在之前的评论中所说,这个问题似乎来自路由。Knp bundle实际上并不欣赏索引路线。因此,我修改了我的控制器,以便使用indexAction()进行重定向。以下是适用于我的:

//Controller\HomeController.php

<?php
namespace PfBundleBlogBundleController;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationRequest;
class HomeController extends Controller
{
    public function indexAction()
    {
        return $this->redirect($this->generateUrl('pf_blog_index2'));
    }
    public function listAction()
    {
        $em    = $this->get('doctrine.orm.entity_manager');
        $dql   = "SELECT a FROM PfBlogBundle:Projects a ORDER by a.id DESC";
        $query = $em->createQuery($dql);
        $paginator  = $this->get('knp_paginator');
        $pagination = $paginator->paginate(
            $query,
            $this->get('request')->query->get('page', 1)/*page number*/,
            8 /*limit per page */
         );
        // Puis modifiez la ligne du render comme ceci, pour prendre en compte l'article :
        return $this->render('PfBlogBundle:Default:home.html.twig', array('pagination'=>$pagination));
    }
}

//src/…./…//config/routing.php

pf_blog_index:
    path:  /
    defaults: { _controller: PfBlogBundle:Home:index }
pf_blog_index2:
    path:  /home
    defaults: { _controller: PfBlogBundle:Home:list }

我不知道这是否是解决这个问题的最佳方法,但它有效,就我而言,我暂时不介意有这样的url。

我希望这能帮助像我这样的初学者!

注意这个代码

$this->get('request')->query->get('page', 1)/*page number*/

通过此代码,您可以获得请求的_get参数的"page"值,但您必须将"page"获取为Request Attribute,而不是_get的值。换句话说,正确的代码是

$this->get('request')->get('page')

KnpPaginatorBundle repo中的示例显示,您需要将Request $request作为参数传递给创建$pagination的控制器方法,在您的情况下是indexAction。我注意到你没有这个参数。这可能就是分页器不分页的原因。我遇到了完全相同的问题,并通过在控制器中包含$request参数来解决它,如KnpPaginatorBundle repo中的示例所示。此外,您需要记住在控制器类中包含use SymfonyComponentHttpFoundationRequest

我也有同样的问题,经过几个小时的搜索,我终于找到了解决方案,我们只需要放

$request = Request::createFromGlobals();

在获得所需变量之前和之后,在我的情况下,通过从"get"中获得

$request->query->get('variable')

相关内容

  • 没有找到相关文章

最新更新