Laravel:从控制器中抛出错误

时间:2017-09-09 14:35:09

标签: php laravel

我有一个项目,如果我想访问partner/X我收到get property of non object错误,因为我的合作伙伴比X少。

我的问题。如何告诉控制器if the result of the modelquery is empty, than throw a 404 error

我的代码到目前为止:

public function showPartner($id = 0){

   //Only allow numerical values    
  if ($id > 0){

    $partner = Partner::find($id);

    if (empty($partner)){
        return ???
    }
  }
}

2 个答案:

答案 0 :(得分:3)

Laravel有一个特定的方法。如果您使用findOrFail($id),它将抛出Illuminate\Database\Eloquent\ModelNotFoundException,因此您无需自己抛出异常。

如果您的意思是“向用户显示404错误”而不是字面上抛出异常,那么抓住它并abort()

public function showPartner($id = 0){

//Only allow numerical values    
    if ($id > 0){
        try {
            $partner = Partner::find($id);
            // do your work
        }
        catch (Illuminate\Database\Eloquent\ModelNotFoundException $e) {
            abort(404, "The Partner was not found");
        }
    }
}

详细了解此here

答案 1 :(得分:1)

使用abort()帮助程序:

abort(404);

如果您愿意,还有abort_if()abort_unless()。无论您选择哪一个,都可以传递所需的状态代码。