Reputation: 257
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)
Upvotes: 0
Views: 8848
Reputation: 25445
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)
Upvotes: 3