我从Laravel开始,希望了解更多关于使用错误处理的知识,特别是ModelNotFoundException对象.

<?php
 class MenuController extends BaseController {

    function f() {
          try {
                $menus = Menu::where('parent_id', '>', 100)->firstOrFail();
            } catch (ModelNotFoundException $e) {
                $message = 'Invalid parent_id.';
                return Redirect::to('error')->with('message', $message);
            }
        return $menus;
    }
  }
?>

In my model:

<?php
 use Illuminate\Database\Eloquent\ModelNotFoundException;  

 class Menu extends Eloquent {
    protected $table = 'categories'; 
}

?>

当然,在我的例子中,"类别"中没有parent_id > 100的记录,这是我的单元测试.所以我想用ModelNotFoundException做点什么.

If I run http://example.co.uk/f in my browser I receive:

Illuminate \ Database \ Eloquent \ ModelNotFoundException
No query results for model [Menu].

the laravel error page - which is expected, but how do I redirect to my route 'error' with the pre-defined message? i.e.

<?php
// error.blade.php

{{ $message }}
?>

如果你能给我举个例子.

推荐答案

默认情况下,在Laravel中有一个在app/start/global.php中声明的错误处理程序,如下所示:

App::error(function(Exception $exception, $code) {
    Log::error($exception);
});

如果没有声明其他特定的处理程序,此处理程序基本上会捕获每个错误.要声明特定(仅针对一种类型的错误),您可以在global.php文件中使用类似以下内容:

App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $exception) {

    // Log the error
    Log::error($exception);

    // Redirect to error route with any message
    return Redirect::to('error')->with('message', $exception->getMessage());
});

最好全局声明错误处理程序,这样就不必在每个模型/控制器中处理它.要声明任何特定的错误处理程序,请记住在默认错误处理程序之后(底部)声明它,因为错误处理程序会从most传播到specific,再传播到generic.

Read more about Errors & Logging.

Laravel相关问答推荐

保存很多模型太慢

运行NPM Prod时出现VUE问题

嵌套数组请求的 Laravel 验证,其中如果整数之一为零,则另一个应大于零

如何在数据来自Rest API的flutter中创建下拉类别名称列表?

自从 Laravel 使用 Vite 更新后,我无法运行npm run dev

在 Laravel 包中的路由上使用显式或隐式模型绑定

laravel 如何验证跨越午夜的两个值之间的时间(15:00 > 时间 > 01:00)

try 发布 AJAX 请求时 POST 405(方法不允许)-Laravel 4

在 laravel 4.2 中,用户 'root'@'localhost' 的 Laravel 访问被拒绝(使用密码:YES)

Lumen 中的自定义 404 页面

在表单中添加一对多 - Backpack laravel

Laravel 应用程序中应用程序键的意义是什么?

如果值存在于另一个字段数组中,Laravel 验证规则

如何调试 Laravel 框架?

Blade 中的条件扩展

如何在 Laravel 视图中找到当前语言?

Class类 App\Http\Controllers\Auth\Request 不存在.

如何在 laravel 用户删除中重置自动增量?

Laravel 获取文件内容

laravel - 无法在控制器构造函数中获取会话