Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel 4资源控制器时如何处理页面未找到错误_Php_Laravel_Laravel 4_Controller_Http Status Code 404 - Fatal编程技术网

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
    ,来处理错误
  • Laravel本身有时也会抛出相同的异常,因此您是一致的
  • 你不必还东西。假设你在某处有一个助手函数。在这里,您不能简单地返回一个视图,但是抛出一个异常仍然可以工作并立即停止执行
  • 此外,您还可以使用
    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或“找不到页面”}