2014-01-24 95 views
0

我已经搜索了所有解决方案来成功实现分页,但没有找到工作。我是Laravel新手,所以我可能只有这些基本的误解之一。Laravel 4分页不起作用(ErrorException)

我已经创建了它,就像它在当前文档中所述。我顺利拿到了第一页,正是我所需要的内容,但是当我尝试使用分页,点击“下一步” - 箭头,我得到一个错误信息:

ErrorException 
Undefined variable: reviews (View: D:\Xampp\htdocs\laravel\app\views\search.blade.php) 

我知道通常这是什么意味着但绝对不知道如何解决这个问题。

这是在视图文件形式:

{{ Form::open(array('url' => '/search', 'class' => 'search', 'method' =>'GET')) }} 
{{ Form::text('title') }} 
{{ Form::submit('Suche')}} 
{{ Form::close() }} 

这里是我的路由配置:

Route::any('/search', array('uses' => '[email protected]')); 

这是我在HomeController的功能:

public function search() { 
    $input = Input::get('title'); 
    if($input && $input != ''){ 
     $games = DB::table('games')->where('name', 'LIKE', "%$input%")->get(); 
     foreach ($games as $game) { 
      $reviews = DB::table('reviews')->whereGame_id($game->id)->paginate(3); 
     } 
    } 
    return View::make('search', compact('reviews', 'input', 'games')); 
} 

这里search.blade.php视图的视图代码,显示结果:

@section('content') 
<h2>Suchergebnisse</h2> 
    @foreach ($reviews as $review) 
     @foreach ($games as $game) 
      @if ($game->id == $review->game_id) 
       <h3> {{ $game->name }} </h3> 
      @endif 
     @endforeach 
     <p>{{ (preg_replace('/\n/i', '<br/>', $review->body)) }}</p> 
    @endforeach 
{{ $reviews->appends(array('term' => $input))->links() }} 
@stop 

如果有人知道为什么Laravel对此解决方案有问题,我会事先感谢您。

编辑: 我已经改变了紧凑的语句,并用一个简单的数组替换它,就像这样:

return View::make('search', array('reviews' => $reviews, 'input' => $input, 'games' => $games)); 

然后我添加global $games; global $reviews;到控制器,所以错误“未定义的变量:评论“消失了。现在,我已经得到了以下信息,但只有2页,第1页上正常工作:

ErrorException 

Invalid argument supplied for foreach() (View: D:\Xampp\htdocs\laravel\app\views\search.blade.php) 
+0

是否有使用了'compact'而只是创建一个数组的原因吗? – ollieread

+0

我刚刚用普通数组替换了'compact',所以我有:'返回View :: make('search',array('reviews'=> $ reviews,'input'=> $ input,'games '=> $ games));'然后我添加了'全球$游戏;全球$评论;'给控制器。现在错误发生了变化,它现在说:'ErrorException:为foreach()提供的无效参数()(View:D:\ Xampp \ htdocs \ laravel \ app \ views \ search.blade.php)'' – hardking

回答

0

首先你这么这样

foreach ($games as $game) { 
    // $reviews is being updated every time in loop 
    $reviews = DB::table('reviews')->whereGame_id($game->id)->paginate(3); 
} 

,每次有新的价值被设置为$review但它应该是一个数组,这就是为什么你应该这样

$reviews = []; // or array(); 
foreach ($games as $game) { 
    $reviews[] = DB::table('reviews')->whereGame_id($game->id)->paginate(3); 
} 

所以在循环之前声明空数组,你会得到在$review数组变量。

关于你提到的错误消息Undefined variable: reviews,它没有定义,这可能是因为if($input && $input != '')条件不匹配或$games什么都没有,所以,尽量调试一步一步你的代码,在首先确保被输入的执行控制在if内部,通过在if内制作dd($input)声明,然后如果它输出任何内容,则在游戏查询之后通过制作dd($games)声明确保$games不为空/虚假。

您可以更改代码段将

$input = Input::get('title'); 
if($input) { 
    $games = DB::table('games')->where('name', 'LIKE', "%$input%")->get(); 
    if($games) { 
     $reviews = []; // or array(); 
     foreach ($games as $game) { 
      $reviews[] = DB::table('reviews')->whereGame_id($game->id)->paginate(3); 
     } 
     return View::make('search', compact('reviews', 'input', 'games')); 
    } 
} 
// return a 404 (not found) or something like this or whatever, when nothing found 
+0

我不能使用' $ reviews-> links()'方法来获取paginator。我得到以下错误,因为$ reviews现在是一个非对象:'调用一个非对象'的成员函数links()。我试图解决这个问题,只需将其在search.blade.php文件中转换为对象,就像这个'$ object =(object)$ reviews',但它说:'调用未定义的方法stdClass :: links( )' – hardking

+0

因为'$ reviews'不是'paginator'实例,它是一个'paginator'实例的数组。首先'paginator'实例是'$ reviews [0]'。 –

+0

在您的视图中,每个'$ review'(在'foreach'循环内)都是'paginator'的一个实例。 –