在Laravel 4中将2个参数从路由传递给控制器

时间:2014-05-07 06:35:37

标签: php laravel laravel-4

路线

Route::get('/site/{site_name_en}/{id}', array(
    'as' => 'profile-site',
    'uses' => 'ProfileController@site'
));

控制器

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条款是否正确? (因为我无法检索到该值)

1 个答案:

答案 0 :(得分: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()(手册中概述了实现)< / p>

相关问题