我是laravel新手,我写了一个简单的代码:
Route::get('users/{uname}/{uid}', function($uname, $uid)
{
$u = DB::table('users')->where('login', $uname)->first();
return View::make('users',
array(
'username' => $u->login,
'userid' => $u->uid
)
);
});
我对此代码有2个问题,
首先:此代码有效吗?
第二:如果找不到查询,如何显示404错误?例如,如果我写site.com/users/badusername/badid然后显示404错误,而不是空白页。
提前致谢!
P.S我怎样才能让你对两个人进行查询?例如WHERE login =?和uid =?
答案 0 :(得分:3)
首先:代码看起来不错。您还可以在方法中使用一些未记录的动态特性,并将其称为:
DB::table('users')->whereLogin($uname)->first();
第二:为了抛出404错误,您只需拨打
即可App::abort(404);
第三:您可以链接 where()方法,例如:
$u = DB::table('users')->where('login', $uname)->where('uid', $uid)->first();
上面的查询没有多大意义,因为 uid ,可能用户名也是唯一的,只有其中一个提取就足够了。如果您的用户拥有Eloquent模型,您还可以使用模型的 find()或 findOrFail()方法按主键搜索。特别是 findOrFail()非常有用,因为如果找不到模型会抛出404异常,所以不需要将它包装在 if 语句中。
答案 1 :(得分:0)
是的,您的代码有效,但您可以将其简化。
get('users/{uname}/{uid}', function($uname, $uid)
{
$user = User::where('login', $uname)->where('uid', $uid)->first();
if (! $user) abort(404);
return view('users', compact('user'));
});
要使用此代码,您需要使用Laravel 5+并为您的User表建立模型。
另外,正如您所看到的,我已经写了另一个条件来处理uid
。
请注意,我将$user
发送到视图。
答案 2 :(得分:0)
假设您拥有用户模型。 尝试:
Route::get('users/{uname}/{uid}', function($uname, $uid)
{
$u = User::where('login', $uname)->where('uid',$uid)->first();
if(!$u->isEmpty()) {
return View::make('users',array('username' => $u->login,
'userid' => $u->uid));
}else{
App::abort(404);
}
});