Laravel 4.2模型名称来自ModelNotFoundException

时间:2015-08-06 14:15:20

标签: php laravel exception model-view-controller model

下午SO,

如果有一种方法可以在:: 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);
});

有没有办法区分哪个模型抛出了异常并在此时出现了自定义错误。

由于

2 个答案:

答案 0 :(得分:0)

  1. 在Controller中验证, 例如:

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

    if(!isset($ post)) {
        中止(404);
    }

  2. 使用FindOrFail, 例如:

    try
    {
        $post = Post::FindOrFail($id)
    }
    
    catch (NotFoundHttpException $e)
    {
        abort(404);
    }
    
  3. for View,Laravel使用views / errors / 404.blade.php
    您可以根据需要自定义它。

答案 1 :(得分:0)

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