我是一个新手,我写了一个简单的代码:
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
)
);
});
我有两个关于这个代码的问题,
First:此代码有效吗?
秒:如何显示404错误时,没有找到查询?例如,如果我写site.com/users/badusername/badid然后显示404错误,而不是空白页。
提前感谢!
p。我如何使$u查询到两个地方?例如WHERE login = ?AND uid = ?
首先:代码看起来不错。您还可以利用一个没有文档记载的动态where方法的小特性,并像这样调用它:
DB::table('users')->whereLogin($uname)->first();
秒:为了抛出404错误,您可以简单地调用
App::abort(404);
第三:可以链, () 方法,例如:
$u = DB::table('users')->where('login', $uname)->where('uid', $uid)->first();
上面的查询没有多大意义,因为uid和用户名也是唯一的,只取其中一个应该就足够了。如果您的用户有一个Eloquent模型,您还可以使用模型的find()或findOrFail()方法按主键进行搜索。特别是findOrFail()非常有用,因为如果找不到模型,它会抛出404异常,所以不需要将其包装在if语句中。
假设您有User模型。试一试:
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);
}
});
是的,你的代码是有效的,但你可以简化它。
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
发送到视图