如果ID不存在,我不想显示页面。
如何在Laravel的web.php路由中进行检查?
我目前有以下路线:
Route::get('/public/{project_id}', 'ProjectController@public');
如何进行条件检查以查看project_id是否存在?
我看到路由文档中有一个Route::bind的选项-这是一个解决方案吗?谢谢
更新说明:由于绑定似乎已经引入到路由类中,因此与Laravel 4方法略有不同。
答案 0 :(得分:5)
您要使用的称为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
答案 1 :(得分:2)
添加到Patrick Schocke的答案中。
如果您不想使用路由模型绑定,则可以显式签入控制器
public function public($project_id) {
$projectExists = Project::where('id', $project_id)->exists();
abort_unless($projectExists, 404, 'Project not found');
...
}
}
答案 2 :(得分:1)
您可以使用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.
}
答案 3 :(得分:1)
只需使用laravel的findOrFail()
方法。
此方法将检索查询的第一个结果;但是,如果未找到结果,则会自动发送404 HTTP响应。
public function public ($project_id) {
$project = Project::findOrFail($project_id);
}
源:https://laravel.com/docs/5.8/eloquent#retrieving-single-models
答案 4 :(得分:0)
您可以检查project_id
是否不存在,然后通过调用404
函数返回abort()
错误。
public function public($project_id) {
$project_id_exist = Project::where('id', $project_id)->first();
if(!$project_id_exist){
return abort(404);
}
}