在Laravel 4中将2个参数从路由传递给控制器
Route
Route::get('/site/{site_name_en}/{id}', array(
'as' => 'profile-site',
'uses' => 'ProfileController@site'
));
Controller
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);
}
}
What I'm trying to achieve is: that when I visit the following URL www.domain.com/site/abc/123456
, it will shown the correct page based on the parameters. Is the where
clause correct? (because I couldn't retrieve the value)
路线 strong> p>
控制器 strong> p>
我正在尝试 实现的是:当我访问以下URL
路线: :get('/ site / {site_name_en} / {id}',array(
'as'=>'profile-site',
'使用'=>'ProfileController @ site'
));
code> pre>
类ProfileController扩展BaseController {
公共函数 site($ id,$ site_name_en){
$ site = Site :: where('id','=',$ id)
- > where('site_name_en','=',$ site_name_en); \ n
if($ site-> count()){
$ site = $ site-> first();
返回View :: make('profile.site')
- > with( 'site',$ site);
}
返回App :: abort(404);
}
}
code> pre>
www.domain.com/site/abc/123456 code>时,它将根据参数显示正确的页面。
where code>子句是否正确? (因为我无法检索该值) p>
div>
Your route
Route::get('/site/{site_name_en}/{id}',
says the 1st parameter is site name, the second the id, but your controller function has the arguments swapped. You should call it:
public function site($site_name_en, $id){
// rest of code
}
parameters are automatically passed down in the order they are defined by the route, and are not recognized by the variable name (IIRC).
As for the rest of your function I can't really tell if you're doing right or not, but I can suggest this:
$site = Site::where('id', '=', $id)
->where('site_name_en', '=', $site_name_en)
->first();
if($site){
return View::make('profile.site');
}
return App::abort(404);
Alternatively, you could use firstOrFail()
, which throws a ModelNotFoundException
if the record is not found that you can catch with App::error()
for example (an implementation is outlined in the manual)