当我访问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 中 ? 之后的部分。符号,由 & 分隔的键值对组成。在您的情况下,查询字符串中没有“slug”键(my.site/api/genre/slug-name)
,因此$request->get("slug")
为空。对于
$reuset->slug
Laravel 来说,内部将路由参数映射到请求对象的属性。因此,如果你有一个名为 的路由参数{slug}
,Laravel 会自动将其绑定到该$request->slug
属性。总之:
$slug
:“slug-name”(从路由参数中提取的值)$request->slug
:“slug-name”(当您访问 时$request->slug
,您正在访问与 相同的值$slug
)$request->get("slug")
: null(查询字符串中没有“slug”键)