我有一条工作路线
Route::get('/{url}', 'Controller@view)->name('view')->where('url', '[\w\d\-]+(.*)');
我在此页面上有一个链接来下订单,我想创建一个路径
Route::get('/{url}/order', 'Controller@order)->name('order')->where('url', '[\w\d\-]+(.*)');
查看Blade
<a href="{{ route('order', $product['url']) }}">Order Now</a>
php artisan route:list
| | GET|HEAD | {slug} | view | App\Http\Controllers\Controller@view | web |
| | GET|HEAD | {slug}/order | order | App\Http\Controllers\Controller@order | web |
每当我点击此链接时,Laravel都会返回未找到错误。什么问题?我重新启动了服务器&amp;检查Mod_rewrite。一切都很好。
答案 0 :(得分:1)
我想你忘记了代码 更改您的代码
Route::get('/{url}/order', 'Controller@order)->name('order')->where('url', '[\w\d\-]+(.*)');
到
Route::get('/{url}/order', 'Controller@order')->name('order')->where('url', '[\w\d\-]+(.*)');
答案 1 :(得分:0)
路线从上到下工作。 Laravel搜索适合给定URL的任何内容。
使用{{slugs}}
或任何其他参数时,最重要的是将最宽范围的密钥放在路线底部。
示例:
Route::get('/{url}', 'Controller@index);
Route::get('/{url}/order', 'Controller@order);
使用此设置。 ALL 路由将转到您的Controller方法。由于您{{url}}抓住了所有内容
通过切换2,您的更严格的路线首先在网址之前得到满足,并且要求非常广泛。
有关详细信息,请查看laravel docs