2014-05-07 77 views
0

路线通2个从路由参数到Laravel控制器4

Route::get('/site/{site_name_en}/{id}', array(
    'as' => 'profile-site', 
    'uses' => '[email protected]' 
)); 

控制器

class ProfileController extends BaseController{ 

    public function site($id, $site_name_en){ 
     $site = Site::where('id', '=', $id) 
      ->where('site_name_en', '=', $site_name_en); 

     if($site->count()){ 
      $site = $site->first(); 
      return View::make('profile.site') 
       ->with('site', $site); 
     } 
     return App::abort(404); 
    } 
} 

我想要实现的是:当我访问以下网址www.domain.com/site/abc/123456 ,它将根据参数显示正确的页面。 where子句是否正确? (因为我无法检索值)

回答

3

您的路线

Route::get('/site/{site_name_en}/{id}', 

说,第一个参数是网站的名称,第二个ID,但你的控制器功能具有交换的参数。你应该把它叫做:

public function site($site_name_en, $id){ 
    // rest of code 
} 

参数在它们被路由中定义的顺序自动传下来的,而不是由变量名称(IIRC)的认可。

至于你的函数的其余部分我真的不能告诉你正在做的正确与否,但我可以建议是:或者

$site = Site::where('id', '=', $id) 
      ->where('site_name_en', '=', $site_name_en) 
      ->first(); 
if($site){ 
    return View::make('profile.site'); 
} 
return App::abort(404); 

,你可以使用firstOrFail(),它抛出一个ModelNotFoundException如果记录没有被发现,你可以用App::error()为例(手册中概述了一个实现)

+0

我确定Damien Pirsy答案会解决问题,但我建议添加一个路由约束,为了安全。 http://laravel.com/docs/routing#route-parameters –

+0

谢谢Damien。 – spacemonkey