当我访问 my.site/api/genre/slug-name
在
route/api.php
:
Route::prefix('genre')->group(function () {
Route::get('/{slug}', [FilmController::class,'getFilmByGenre'])->name('api_genre_film');
});
在
getFilmByGenre
:
public function getFilmByGenre(Request $request, string $slug)
{
dd($slug, $request->slug, $request->get("slug")); // "slug-name" - "slug-name" - null
}
谁能给我解释一下使用
$slug
、$request->slug
和 $request->get("slug")
时的区别吗?
我正在使用 laravel 10.x。感谢您的帮助!
这是因为路由参数绑定与查询参数之间的差异。关于路由参数绑定与搜索查询参数的概念。
$slug
参数直接从路由定义获取其值。它是一个路由参数,绑定到 URI 模式。
$request->get("slug")
尝试从查询字符串中检索键“slug”的值。查询字符串是 URL 中 ? 之后的部分。符号,由 & 分隔的键值对组成。
在您的情况下,查询字符串 (my.site/api/genre/slug-name)
中没有“slug”键,因此 $request->get("slug")
为空。
总结:
$slug
:“slug-name”(从路由参数中提取的值)
$request->get("slug")
:null(查询字符串中没有“slug”键)