Laravel自定义错误,模型注入控制器

时间:2016-07-13 21:40:38

标签: php laravel error-handling laravel-5.2

所以我遇到了一个我无法解决的问题,并且不知道我应该从哪里开始。

我知道Laravel有一个很好的findOrFail()功能,但我似乎无法在我的情况下使用它。例如,我有一条路线如下:

Route::get('user/{user}', 'UserController@show);

我的控制器

public function show(User $user)
{
    //never reaches this section 
}

现在这通常会起作用,但是如果记录不存在,Laravel会在我进入函数之前抛出错误。有没有一种很好的方法来捕捉错误而不用改变我的功能

public function show($id)
{
    $user = User::findOrFail($id)
}

我发现在我的函数参数中使用用户类并希望不在那里删除它会更好。

2 个答案:

答案 0 :(得分:2)

the Laravel Docs for Route Model Binding(向下滚动到'自定义'未找到“行为”标题):

  

如果您希望指定自己的“未找到”行为,请将Closure作为第三个参数传递给model方法:

$router->model('user', 'App\User', function () {
    throw new NotFoundHttpException;
});

之前他们指定放置该代码的位置:

  

您应该使用RouteServiceProvider::boot方法定义模型绑定。

答案 1 :(得分:0)

第一次回答问题所以请耐心等待!

您可以使用PHP try / catch块。所以像这样:

try {
        //Your code here
    } catch (\Exception $e) {
        return \Redirect::to('/users')
            ->with('error', 1)
            ->with('message', 'Error getting your record!');
    }

然后在您的Laravel刀片中,您可以执行以下操作:

@if(!empty($error) && $error == 1)
   <div>
      <strong>Uh-Oh!</strong> 
        @if(!empty($message))
            {!! $message !!}
        @endif
   </div>
@endif

显示错误。您还可以重定向到所需的某个错误页面。