php - Laravel 显式路由模式绑定在某些情况下不起作用?
问题描述
我在我的项目中使用 Laravel 8 和显式路由模式绑定来调用产品slug
而不是id
. 我有产品、帖子等,它们都slug
在数据库中使用显式路由模式绑定而不是id
.
真正让我困惑的是,显式路由模式绑定无处不在,但不适用于products
. 这是我的 RouteServiceProvider:
// Change route for product from $id to $slug
Route::bind('product', function ($value) {
return Product::where('slug', $value)->first() ?? abort(404);
});
// Change route for user from $id to $name
Route::bind('user', function ($value) {
return User::where('name', $value)->first() ?? abort(404);
});
// Change route for product from $id to $slug
Route::bind('post', function ($value) {
return Post::where('slug', $value)->first() ?? abort(404);
});
routes
以下是a user
、 aproduct
和 a的一些示例post
:
works: Route::get('/product/{productType}/{product}', ['as' => 'product.show', 'uses' => 'ProductController@show']);
404 error: Route::post('product/{product}/like', ['as' => 'product.like', 'uses' => 'LikeController@likeProduct']);
404 error: Route::post('product/{product}/dislike', ['as' => 'product.dislike', 'uses' => 'LikeController@dislikeProduct']);
404 error: Route::post('product/{product}/mark', ['as' => 'product.mark', 'uses' => 'ProductController@markProduct']);
works: Route::get('user/{user}', ['as' => 'user.show', 'uses' => 'UserController@show']);
works: Route::post('user/{user}/update/password', ['as' => 'user.password.change', 'uses' => 'UserController@updatePassword']);
works: Route::get('/blog/{postCategory}/{post}', ['as' => 'post.show', 'uses' => 'PostController@show']);
当我在 RouteServiceProvider 中为做一个dd
for时,我可以弄清楚这里有什么问题。所有这些都转储了资源的实际值。甚至对产品的要求也是实际的。但是,在执行 a请求时,我总是得到as 值的结尾。当然,这会导致.value
user
product
post
values
slug
get
slug
post
product
url
404
例如,product/{product}/mark
带有post
请求的路由确实会转储mark
为产品value
而不是slug
产品的...为什么会这样?所有其他post
请求工作正常!
我也尝试将路由从post
方法切换到get
方法,但结果相同......也是一个404
错误,我再次mark
得到value
......
谁能解释这里的问题以及为什么它不起作用?
当我改变它时product/{product}/mark
,produkt/{product}/mark
它正在工作。但为什么?为什么 '/product/{productType}/{product}' 有效?这真的很奇怪。。
亲切的问候,谢谢!
解决方案
我现在已经删除了我的更改,RouteServiceProvider
并且我正在使用自 Laravel 8 以来提供的这个功能。问题解决了......我不知道问题是什么......
推荐阅读
- php - PHP - 使用 isSet() 和检查真实值有什么意义?
- mysql - 从 MySQL Workbench 连接到 SiteGround MySQL 数据库的“无法连接到数据库服务器”错误
- c++ - 模板实例化期间第二遍名称查找的静态与匿名名称空间的差异
- node.js - 如何将 facebook shop 集成到 react js、node js 或 php 应用程序中
- python - 加密的字符串与相同的字符串 python 的值不同
- kubernetes - 第一个参数未传递给 kubernetes 部署中的映像
- apache-spark - docker-compose.yml spark/hadoop/hive 三个数据节点
- java - Hashmap 代码未通过所有测试用例
- css - 在 ::After 伪元素 CSS 中的两个单词之间添加空格
- ios - Flutter firebase 消息传递 iOS 配置文件