【问题标题】:Laravel - 404 | Not Found upon "/{id}" entryLaravel - 404 |在“/{id}”条目中未找到
【发布时间】:2021-12-01 10:37:36
【问题描述】:

当我尝试访问数据库中的特定项目时,我收到“404 | Not Found”错误。具有特定 ID 的项目确实存在于数据库中,但我什至不确定这是否对问题有任何影响。

我的路由看起来像这样:

Route::prefix('departments')->group(function() {
Route::get('/{id}', [DepartmentController::class, 'showDepartment']);
});

而相关的控制器是这样的:

public function showDepartment() {
        return '';
    }

}

我还没有完成这个功能。我只是想通过返回一个空字符串来检查路由是否有效。

那么我做错了什么?是路由还是控制器?

【问题讨论】:

  • 如何查看控件中的ID,确保其为空?
  • 您尝试访问的完整 URL 是什么?是 Laravel 404 错误还是网络服务器默认 404?不,如果 id 存在于您的数据库中并不重要,因为您实际上并没有检查它。
  • @MagnusEriksson 这是 Laravel 404 错误。我在本地托管它:localhost:8000/departments/{id}
  • 您在浏览器的 URL 中确实有 {id} 吗?如果是这样,请尝试使用 123 之类的内容。
  • @MagnusEriksson 不,哈哈。我输入“/departments/1”(数据库中确实存在)或“/departments/100”(数据库中不存在)都没有关系。无论如何都会出现错误。跨度>

标签: php laravel routes controller


【解决方案1】:

根据 Laravel documentation,您必须在路由中定义参数,然后在控制器中将其用作参数。 在您的控制器中:

public function showDepartment($id) {
    return 'Hello';
}

id 没有绑定到任何模型来从数据库中获取,你可以使用Laravel route model binding

例如,当您有一个名为 Department 的模型时,您可以这样编写路线:

Route::get('/{department}', [DepartmentController::class, 'showDepartment']);

在控制器中:

public function showDepartment(Department $department) {
    return 'Hello from depratment';
}

当您的部门存在时,它返回响应,否则返回 404。

【讨论】:

    【解决方案2】:

    您可能需要一个 Department 模型类。然后您可以通过 id $department = Department::findOrFail($id);从数据库中找到该项目

    【讨论】:

    • 为什么在这种情况下需要这样做?仅仅因为你有一个组,并不意味着它会自动尝试检查数据库,除非你告诉它。
    【解决方案3】:

    你在路由中发送参数,这个函数没有任何参数 路线:

    Route::prefix('departments')->group(function() {
    Route::get('/{id}', [DepartmentController::class, 'showDepartment']);
    });
    

    你在控制器中的功能应该是

    public function showDepartment($id) {
    
            $department = Department::findOrFail($id);
        }
    
    }
    

    【讨论】:

    • 不应该路由仍然有效,只是它不会在没有添加到方法签名的情况下获取 ID?
    猜你喜欢
    • 2021-01-27
    • 2021-03-21
    • 2019-10-20
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多