当我访问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")try 从查询字符串中检索关键字"slug"的值.查询字符串是URL中后面的部分?符号并由由.分隔的关键字-值对组成 在您的情况下,查询字符串(my.site/api/genre/slug-name)中没有"slug"键,因此$request->get("slug")为空.

对于$reuset->slug,Laravel在内部将路由参数映射到请求对象的属性.因此,如果您有一个名为{slug}的路由参数,Laravel会自动将其绑定到$request->slug属性.

总结:

$slug:"slug-list"(从路由参数中提取的值)

$request->slug:"slug-Name"(当您访问$request->slug时,您访问的值与$slug相同)

$request->get("slug"):空(查询字符串中没有"slug"键)

Laravel相关问答推荐

密码确认在Livewire中不匹配

Laravel FAKER语法

我的共享主机上的每个帖子请求都出现 503 服务不可用

如何自定义密码确认不匹配.错误信息?

laravel render() 方法有什么用?

Laravel Artisan Scheduler 中的链式命令?

Laravel 5.3 - 将多个文件附加到 Mailables

Laravel 表 * 没有名为 * 的列

laravel 5中的配置缓存导致找不到视图

如何更改 Handlebars.js 的默认分隔符?

Laravel 动作未定义

如何将 Facebook PHP SDK 与 Laravel 5.4 集成?

在 Laravel 中,如何获取 *only* POST 参数?

Laravel 模型:模型属性在哪里?

Laravel / Eloquent内存泄漏重复检索相同的记录

Laravel:方法[显示]不存在

Laravel 4 验证唯一(数据库)忽略当前

Laravel 用户能力

复合唯一密钥验证 - laravel

将参数传递给过滤器 - Laravel 4