Php 使用Laravel 4资源控制器时如何处理页面未找到错误
我有一条通往控制员的足智多谋的路线Php 使用Laravel 4资源控制器时如何处理页面未找到错误,php,laravel,laravel-4,controller,http-status-code-404,Php,Laravel,Laravel 4,Controller,Http Status Code 404,我有一条通往控制员的足智多谋的路线 Route::resource ('users', 'UsersController'); UsersController拥有由资源控制器处理的所有操作 Verb Path Action RouteName -------------------------------------------------------------------------- GET
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)
操作的,处理用户请求的情况的最佳方法是什么,例如:
表演的方法是这样的
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”
}
注意:我仍在学习Laravel,因此如果不清楚,请接受我的道歉。我认为最好的方法是抛出404错误(
NotFoundHttpException
)。为什么?例如,如果指定ID的用户不存在,它将抛出404错误
注意:如果在数据库中找不到匹配的模型实例,将抛出404错误
我总是抛出(404)异常。专业人士:
catch
或App::abort
,App::error
,来处理错误findOrFail
,如果找不到模型,它会自动引发404异常:
$user = User::findOrFail($id);
下面是一种在模型异常之后显示未找到消息的方法。
在您的路线中:
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>
{{{$error或“找不到页面”}