从ModelNotFoundException获取模型名


Laravel 4.2 Model Name from ModelNotFoundException

下午好,

我一直在尝试锻炼,如果有一种方法来找出/传递模型名称时,a::findOrFail()查询执行ModelNotFoundException错误。

最近在一个最终用户可能会删除订单的应用程序中,这对我来说已经成为一个问题。如果有人将该URL添加为书签,或者试图访问与已删除订单相关的URL,我会抛出异常并显示404页面。

模型声明:

use Illuminate'Database'Eloquent'SoftDeletingTrait;
class Order extends Eloquent
{
    use SoftDeletingTrait;
    ...
}

FindOrFail:

$order = $this->organisation->orders()->with('events', 'events.user', ...)->where('id', $id)->firstOrFail();

异常处理程序

use Illuminate'Database'Eloquent'ModelNotFoundException;
App::error(function(ModelNotFoundException $e)
{
    return Redirect::route('404')->withMessage(modelNameHere);
});

是否有一种方法可以区分哪个模型抛出了异常并显示自定义错误。

谢谢

答案是。找出导致异常的模型非常简单。一旦捕获了ModelNotFoundException对象,就可以在其上调用getModel()来获取可以找到的模型的类名。

  1. 控制器验证,例如:

    $post = post::find($post_id);

    isset($post)

    {
    中止(404)。
    }

  2. 使用FindOrFail,例如:

    try
    {
        $post = Post::FindOrFail($id)
    }
    catch (NotFoundHttpException $e)
    {
        abort(404);
    }
    

对于View, Laravel使用views/errors/404.blade.php