我从GitHub下载了laravel的入门工具包。
到目前为止一切都很好。博客页面有分页。通过更改相同的分页(x)值,我可以随心所欲地更改每页的项目数。
现在的问题是,我自己手动创建了一个名为"搜索"的新页面,它显示搜索到的关键字的结果。
在这里,我添加了相同的分页,它显示了每页的项目数,如前所述,页码,箭头。一切都很完美,但当我点击第2页时,它会显示一个空白页面。空白页的页源也是空的。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');
使用GET方法更好地搜索表单,因为它可以方便地为URL添加书签/保存以供以后使用。在Laravel 4的分页中,有一种方法可以附加查询字符串。因此,我们可以在其他页面中保留搜索查询字符串。
文档:http://laravel.com/docs/pagination#appending-到分页链接
我的代码:
搜索表单
<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=其他页面中的querystring(例如:/lib/search?page=2&q=apple)
首先是
return View::make('frontend/search', compact('posts'))->with('success', 'Account successfully updated')->with('posts', $posts);
当执行compact
时,您已经在视图中包含了要用作$posts
的$posts
变量,与使用with('posts', $posts)
时完全相同。所以最后一个可以去掉。如果您想使用compact
加载更多的变量,只需用逗号分隔变量名即可。
您正在Search
的POST
操作中对项目进行分页,当您单击任何分页链接或调用page=2
时——如果您没有运行postSearch
方法,您可能正在调用getSearch
,因为您现在没有执行POST
请求。
看看RESTful控制器
需要检查的几件事。
- 新路由存在于
app/routes.php
文件中 - 您正在返回新管线的视图文件
- 该视图文件具有分页输出。例如:
<?php echo $articles->links(); ?>
最终,似乎出现了某种错误,这就是页面呈现为空白的原因。尝试在dev-env中打开php错误,看看之后会发生什么。
appends解决了我的问题。此外,使用附件将使我们的用户能够保存/书签URL以备将来使用。
但有一个问题是,它并没有把结果的首页附加上去。