【问题标题】:Route::bind throwing NotFoundHttpException on non existent resourceRoute::bind 在不存在的资源上抛出 NotFoundHttpException
【发布时间】:2017-06-22 15:59:02
【问题描述】:

当资源不存在时,这个 Route::bind() 会抛出 NotFoundHttpException,

Route::bind('layout', function($value, $route) {
    return App\Layout::where('id', $value)->first();
});

布局资源的完整路由如下,

Route::model('layout', 'Layout');

Route::bind('layout', function($value, $route) {
    return App\Layout::where('id', $value)->first();
});

Route::resource('layout', 'LayoutController');

我有几个资源具有完全相同的路由配置,当资源不存在时不会引发此异常。为什么只有一个与许多其他路由配置相同的路由配置会发生这种情况?我为所有这些其他资源处理控制器中不存在的资源。

这是完整的错误,

NotFoundHttpException in Handler.php line 113:
No query results for model [App\Layout].

【问题讨论】:

    标签: php laravel laravel-5.3


    【解决方案1】:
    1. 试试Route::model('layout', App\Layout::class);
    2. 您无需同时使用Route::model 和Route::bind,选择最适合您需要的,我认为Route::model 适合您的情况
    3. 在RouteServiceProvider 类中注册您的路由模型和/或路由绑定,而不是在您的routes.php 文件中

    【讨论】:

    • 感谢您的帮助。但是,我遇到了同样的错误。完整的错误是 Handler.php 第 113 行中的 NotFoundHttpException: No query results for model [App\Layout]
    • 尝试删除 Route::model 并改用 Route::bind
    • 已移除 Route::model() 并将所有 Route::bind() 调用从 web.php 移至 app\Providers\RouteServiceProvider::boot() 仍然得到只有这个的非常奇怪的双重标准当其他人将空资源传递给我的控制器时,资源会引发此异常...
    • 好的。这是这个senerio的一个转折点。如果我将路线从“布局”更改为“布局”。它有效.... 使用 Route::resource('layou', 'LayoutController')。为什么使用“布局”会搞砸。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2017-04-21
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多