2017-06-29 77 views
2

如何在使用树枝的Slim 3项目中使用Eloquent中的Paginate功能?Slim 3项目中使用树枝的雄辩分页功能

这是在我的控制器:

$posts = Sound::paginate(2); 

$this->container->view->render($response, 'admin/sounds/index.twig', [ 
    'posts' => $posts 
]); 

这是视图:

{{ posts.links() }} 

但正如我预期它不工作,以及:

Warning: call_user_func() expects parameter 1 to be a valid callback, no array or string given in **PATH_TO_PROJECT**\vendor\illuminate\pagination\AbstractPaginator.php on line 412 

Fatal error: Call to a member function make() on null in **PATH_TO_PROJECT**\vendor\illuminate\pagination\LengthAwarePaginator.php on line 90 

我必须做些什么来使其工作?

回答

-1

对不起已故:

我没有保留这个项目,我不记得我是怎么做的,但是这个:https://github.com/romanzipp/PHP-Slim-Pagination看起来像我所做的。

$app->get('/posts', function(Request $req, Response $res, $args = []) use ($cache) { 

    $page  = ($req->getParam('page', 0) > 0) ? $req->getParam('page') : 1; 
    $limit  = 5; // Number of posts on one page 
    $skip  = ($page - 1) * $limit; 
    $count  = Post::getCount([]); // Count of all available posts 

    return $this->view->render($res, 'post-list.twig', [ 
     'pagination' => [ 
      'needed'  => $count > $limit, 
      'count'   => $count, 
      'page'   => $page, 
      'lastpage'  => (ceil($count/$limit) == 0 ? 1 : ceil($count/$limit)), 
      'limit'   => $limit, 
     ], 
     // return list of Posts with Limit and Skip arguments 
     'posts'   => Post::getList([ 
      'limit'   => $limit, 
      'skip'   => $skip, 
     ]) 
    ]); 
}); 

模板:

{% if pagination.needed %} 
    <div class="ui pagination menu"> 
     {% for i in 1..pagination.lastpage %} 
      <a class="{% if i == pagination.page %}active{% endif %} item" href="?page={{ i }}">{{ i }}</a> 
     {% endfor %} 
    </div> 
{% endif %} 

<div class="ui container"> 
    {% for post in posts %} 
     <a class="item"> 
      {# Post contents (title, url, ...) #} 
     </a> 
    {% endfor %} 
</div> 
+0

虽然这可能会在理论上回答这个问题,但[这将是更可取的](// meta.stackoverflow.com/q/8259)在这里包含答案的基本部分,并提供供参考的链接。 – GhostCat

0

你可以试试这个:

{{ posts.links }} 

我猜想links是返回链接吸气。如果没有,这不会像你期望的那样工作。

0

首先,你需要包括照射/分页项目中的(它不包括照射/数据库):

composer require illuminate/pagination 

现在分页程序需要知道如何解决当前页面。您应该确保这是使用分页程序完成之前,我个人把它放在我设置的依赖关系:

// $container is application's DIC container. 
// Setup Paginator resolvers                                              
Illuminate\Pagination\Paginator::currentPageResolver(function ($pageName = 'page') use ($container) {                            

    $page = $container->request->getParam($pageName);                                        

    if (filter_var($page, FILTER_VALIDATE_INT) !== false && (int) $page >= 1) {                                  
     return $page;                                                
    }                                                    
    return 1;                                                  
}); 

然后你可以输出分页链接你的树枝模板。但是,请你应该注意到分页程序生成需要的是所以你需要告诉树枝忽略逃逸的链接将被写入到输出一些HTML代码:

{{ posts.links | raw }} 
+0

嗨,好知道,但我做了我自己PAGINATE系统。我没有尝试你的解决方案。 – Swarovski

+1

发布您的解决方案将很好,所以其他人会知道有其他方法来实现这一点。 – Nima