【问题标题】:Laravel 4.2 Model Name from ModelNotFoundException来自 ModelNotFoundException 的 Laravel 4.2 模型名称
【发布时间】:2015-10-29 17:47:46
【问题描述】:

下午所以,

我一直在尝试在 ::findOrFail() 查询执行 ModelNotFoundException 错误时找出/传递模型名称的方法。

最近,在最终用户可能会删除订单的应用程序中,这已成为我的一个问题。如果有人为该 URL 添加了书签或以其他方式尝试访问与已删除订单关联的 URL,我会抛出异常并显示 404 页面。

模型声明:

use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Order extends Eloquent
{
    use SoftDeletingTrait;
    ...
}

查找或失败:

$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);
});

有没有办法区分哪个模型引发了异常并考虑到这一点显示自定义错误。

谢谢

【问题讨论】:

  • 您是否在型号名称中添加了“使用”?

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


【解决方案1】:

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

【讨论】:

  • 非常感谢,这正是我想要的。如果您碰巧知道可以在文档中的哪个位置找到它,您能否指出正确的方向。
【解决方案2】:
  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
您可以根据需要对其进行自定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2015-11-05
    • 2014-09-19
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多