Laravel 4中的分页适用于一页。但不是为另一个人工作

时间:2013-07-03 15:22:47

标签: php mysql pagination laravel laravel-4

我使用GitHub的哨兵下载了laravel入门套件。

到目前为止,一切都很好。博客页面有分页。我可以通过更改相同的分页(x)值来更改每页的项目数。

现在问题是,我自己手动创建了一个名为“搜索”的新页面,显示搜索到的关键字的结果。

这里我添加了相同的分页,它显示了所提到的每页项目数,页码,箭头。一切都很完美,但是当我点击第2页时,它会显示一个BLANK PAGE。空白页面的页面源也是空的。该URL非常适合第二页。它正确生成为

sitename.dev/search?page=2

请指导我哪里出错了。博客页面分页仍然可以正常工作。问题仅出现在新创建的SEARCH页面分页中。

这是我的控制器

public function postSearch()
{
    $searchString = Input::get('searchInput');

    $posts = Post::where('title', 'LIKE', '%' . $searchString . '%')->orderBy('created_at', 'DESC')->paginate(4);

    if($searchString){

    return View::make('frontend/search', compact('posts'))->with('success', 'Account successfully updated')->with('posts', $posts);
    }
    else{
        return Redirect::route('home')->with('error', 'Please enter Search Term');
    }

}

这是我的路线

Route::any('/search', 'BlogController@postSearch');

4 个答案:

答案 0 :(得分:4)

使用GET方法更好地搜索表单,因为它可以轻松地为URL添加书签/保存以供以后使用。在Laravel 4的Pagination中,有一种方法可以附加查询字符串。因此,我们可以将搜索查询字符串保留在其他页面中。

文档: http://laravel.com/docs/pagination#appending-to-pagination-links

我的代码:

搜索表单

<form method="get" action="{{{ URL::to('lib/search') }}}">
<input class="input-xxlarge" name="q" type="text" placeholder="Search...">
<div class="control-group">
    <div class="controls">
        <input type="submit" class="btn" id="submit" value="Submit" />
    </div>
</div>

<强>路由

Route::get('lib/search', 'LibraryController@getSearch');

<强>控制器

public function getSearch()
{
    $search = Input::get('q');

    $posts = $this->post->where('title', 'like', '%'.$search.'%')->paginate(10);

    return View::make('site/libraries/list', compact('posts', 'search'));
}   

查看/刀片 在显示分页的方法:

{{ $posts->appends(array('q' => $search))->links() }}

所以我们可以在其他页面中保留 q =?查询字符串(例如:/ lib / search?page = 2&amp; q = apple)

答案 1 :(得分:0)

要检查的一些事项。

  1. 新路由存在于app/routes.php文件中。
  2. 您正在返回新路线的视图文件。
  3. 该视图文件具有分页输出。例如:<?php echo $articles->links(); ?>
  4. 最终,似乎出现了某种错误,这就是页面呈现空白的原因。尝试在你的开发环境中打开php错误,看看之后会发生什么。

答案 2 :(得分:0)

追加解决了我的问题。此外,使用附加功能还可以让我们的用户将URL保存/加入书签以供将来使用。

但有一个问题是,它没有追加结果的第一页。

答案 3 :(得分:0)

首先

return View::make('frontend/search', compact('posts'))->with('success', 'Account successfully updated')->with('posts', $posts);

在执行compact时,您已将$posts var包含在视图中用作$posts,与您使用with('posts', $posts)完全相同。所以最后这个可以删除。如果要使用compact加载更多变量,只需用逗号分隔变量名称。

当您点击任何分页链接或致电POST您未运行Search时,您正在page=2 postSearch getSearch行动中对该项目进行分页方法,您可能正在调用POST,因为您现在没有执行{{1}}请求。

查看RESTful controllers