Laravel 路由 - 检查 ID 是否不存在并显示 404
Laravel Route - Check if ID does not exist and show 404
如果ID不存在,我不想显示该页面。
我如何在 Laravel 的 web.php 路线中检查这个?
我目前有以下路线:
Route::get('/public/{project_id}', 'ProjectController@public');
如何进行条件检查以查看 project_id 是否存在?
我在路由文档中看到 Route::bind 的选项 -- 这是解决方案吗?谢谢
更新说明:与 Laravel 4 方法略有不同,因为绑定似乎已融入路由 class。
你要用的叫Route Model Binding。 Laravel 开箱即用。如果 ID 不在数据库中,则会显示 404 页面。但是,您需要更改路线:
假设您的模型名为 Project
,路线应如下所示:
Route::get('/public/{project}', 'ProjectController@public');
你的 ProjectController
应该是这样的:
public function public(Project $project) {
这样 Laravel 会自动使用您提供的 ID 解析项目并将其注入 $project
变量。如果不存在具有该 ID 的记录,laravel 重定向到 404
添加到 Patrick Schocke 的回答中。
如果不想使用Route Model Binding,可以显式签入controller
public function public($project_id) {
$projectExists = Project::where('id', $project_id)->exists();
abort_unless($projectExists, 404, 'Project not found');
...
}
}
您可以通过调用abort()
函数来检查project_id
是否不存在然后return 404
错误。
public function public($project_id) {
$project_id_exist = Project::where('id', $project_id)->first();
if(!$project_id_exist){
return abort(404);
}
}
您可以使用 laravel 路由模型绑定功能来实现此目的
你的路线是
Route::get('/public/{project}', 'ProjectController@public');
您的控制器将是
public function public(Project $project) {
// Do your work here using $project model
// If a matching model instance is not found in the database, a 404 HTTP response will automatically be generated.
}
只需使用 laravel 的 findOrFail()
方法。
此方法将检索查询的第一个结果;但是,如果未找到结果,则会自动发送 404 HTTP 响应。
public function public ($project_id) {
$project = Project::findOrFail($project_id);
}
来源:https://laravel.com/docs/5.8/eloquent#retrieving-single-models
如果ID不存在,我不想显示该页面。
我如何在 Laravel 的 web.php 路线中检查这个?
我目前有以下路线:
Route::get('/public/{project_id}', 'ProjectController@public');
如何进行条件检查以查看 project_id 是否存在?
我在路由文档中看到 Route::bind 的选项 -- 这是解决方案吗?谢谢
更新说明:与 Laravel 4 方法略有不同,因为绑定似乎已融入路由 class。
你要用的叫Route Model Binding。 Laravel 开箱即用。如果 ID 不在数据库中,则会显示 404 页面。但是,您需要更改路线:
假设您的模型名为 Project
,路线应如下所示:
Route::get('/public/{project}', 'ProjectController@public');
你的 ProjectController
应该是这样的:
public function public(Project $project) {
这样 Laravel 会自动使用您提供的 ID 解析项目并将其注入 $project
变量。如果不存在具有该 ID 的记录,laravel 重定向到 404
添加到 Patrick Schocke 的回答中。
如果不想使用Route Model Binding,可以显式签入controller
public function public($project_id) {
$projectExists = Project::where('id', $project_id)->exists();
abort_unless($projectExists, 404, 'Project not found');
...
}
}
您可以通过调用abort()
函数来检查project_id
是否不存在然后return 404
错误。
public function public($project_id) {
$project_id_exist = Project::where('id', $project_id)->first();
if(!$project_id_exist){
return abort(404);
}
}
您可以使用 laravel 路由模型绑定功能来实现此目的
你的路线是
Route::get('/public/{project}', 'ProjectController@public');
您的控制器将是
public function public(Project $project) {
// Do your work here using $project model
// If a matching model instance is not found in the database, a 404 HTTP response will automatically be generated.
}
只需使用 laravel 的 findOrFail()
方法。
此方法将检索查询的第一个结果;但是,如果未找到结果,则会自动发送 404 HTTP 响应。
public function public ($project_id) {
$project = Project::findOrFail($project_id);
}
来源:https://laravel.com/docs/5.8/eloquent#retrieving-single-models