我有一条通往控制器的资源丰富的路线
Route::resource ('users', 'UsersController');
UsersController具有资源控制器
处理的所有操作Verb Path Action RouteName
--------------------------------------------------------------------------
GET /users index users.index
GET /users/create create users.create
POST /users store users.store
GET /users /{id} show users.show
GET /users {id}/edit edit users.edit
PUT/PATCH /users /{id} update users.update
DELETE /users /{id} destroy users.destroy
我的问题和问题涉及show($id)
操作,处理例如用户请求的情况的最佳方法是什么:
http://example.com/users/anyunexpectedinput
并且show动作方法就像这样
public function show($id)
{
$user = User::find($id);
//should I do this
If(!is_object($user)) App::abort(404, 'Page not found');
//OR
//Return a view with message “user not found”
}
Nb:我还在学习Laravel,所以如果不清楚,请接受我的道歉。
答案 0 :(得分:2)
我总是抛出(404)异常。 Pro的:
catch
或App::abort
,App::error
来处理错误此外,如果没有找到模型,您可以使用findOrFail
自动抛出404异常:
$user = User::findOrFail($id);
答案 1 :(得分:0)
IMO最好的方法是抛出404错误(NotFoundHttpException
)。为什么?例如here如果具有指定ID的用户不存在,则会抛出404错误。
注意:如果在数据库中找不到匹配的模型实例,则会抛出404错误。
答案 2 :(得分:0)
这是一种在模型异常后显示未找到的消息的方法。
在你的路线:
use Illuminate\Database\Eloquent\ModelNotFoundException;
App::error(function(ModelNotFoundException $e)
{
$error= BaseController::getException($e);
return View::make('404')->with('error', $error); ;
});
在你的BaseController中:
static public function getException($e)
{
if(!$e->getModel())
return;
// Users
if($e->getModel() == "User")
return('This user doesn\'t exist');
// Blog posts, ...
if($e->getModel() == "Post")
return('This post doesn\'t exist');
}
在404视图中:
<p>{{{ $error or 'Page not found' }}}</p>