为什么 web.php 中的路由由于传入 laravel 8 中的参数而发生冲突
Why route in web.php conflicts due to a parameter passing in laravel 8
我有路线 web.php
Route::get('{cat}',[WebsiteController::class,'dbCategories'])->name('dbCategories');
{cat}
是要显示其产品的特定类别的 slug。
我对这里的另一条路线有疑问
Route::get('blogs',[WebsiteController::class,'show_blogs_toWebsite'])->name('show_blogs_toWebsite');
当我到达这条路线时,它会转到第一条。我怎样才能区分这两个。
请帮我。谢谢。
- 您可以通过在 {cat} 之前或之后添加字符串来更改第一条路线 url,例如
Route::get('/category/{cat}',[WebsiteController::class,'dbCategories'])->name('dbCategories')
另外,如果你改变路由的顺序,它会工作得很好
注意:运行 php artisan route:clear 测试前命令
一般情况下,先声明优先权的,例如
Route::get('blogs',[WebsiteController::class,'show_blogs_toWebsite'])->name('show_blogs_toWebsite');
Route::get('{cat}',[WebsiteController::class,'dbCategories'])->name('dbCategories');
您还有一些其他选择,例如在路由处理程序中处理:
Route::get('{cat}',function ($cat) {
if ($cat === 'blogs') return app()->call([WebsiteController::class,'show_blogs_toWebsite']);
return app()->call([WebsiteController::class,'dbCategories']);
});
这样做的缺点是您丢失了路由名称。
另一种方法是指定一个正则表达式来匹配 {cat}
例如
Route::get('{cat}',[WebsiteController::class,'dbCategories'])
->name('dbCategories')
->where('cat', '^((?!blogs).)*$');
Route::get('blogs',[WebsiteController::class,'show_blogs_toWebsite'])
->name('show_blogs_toWebsite');
上面的正则表达式来自
我有路线 web.php
Route::get('{cat}',[WebsiteController::class,'dbCategories'])->name('dbCategories');
{cat}
是要显示其产品的特定类别的 slug。
我对这里的另一条路线有疑问
Route::get('blogs',[WebsiteController::class,'show_blogs_toWebsite'])->name('show_blogs_toWebsite');
当我到达这条路线时,它会转到第一条。我怎样才能区分这两个。 请帮我。谢谢。
- 您可以通过在 {cat} 之前或之后添加字符串来更改第一条路线 url,例如 Route::get('/category/{cat}',[WebsiteController::class,'dbCategories'])->name('dbCategories')
另外,如果你改变路由的顺序,它会工作得很好
注意:运行 php artisan route:clear 测试前命令
一般情况下,先声明优先权的,例如
Route::get('blogs',[WebsiteController::class,'show_blogs_toWebsite'])->name('show_blogs_toWebsite');
Route::get('{cat}',[WebsiteController::class,'dbCategories'])->name('dbCategories');
您还有一些其他选择,例如在路由处理程序中处理:
Route::get('{cat}',function ($cat) {
if ($cat === 'blogs') return app()->call([WebsiteController::class,'show_blogs_toWebsite']);
return app()->call([WebsiteController::class,'dbCategories']);
});
这样做的缺点是您丢失了路由名称。
另一种方法是指定一个正则表达式来匹配 {cat}
例如
Route::get('{cat}',[WebsiteController::class,'dbCategories'])
->name('dbCategories')
->where('cat', '^((?!blogs).)*$');
Route::get('blogs',[WebsiteController::class,'show_blogs_toWebsite'])
->name('show_blogs_toWebsite');
上面的正则表达式来自