我的web.php中有2条路线
1)Route::get('/{url}', 'MenuController@menu');
提供网址:
2)Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');
提供网址:
如果路线=同名,我想使用2路线如果路线1没有路径,我想使用路线1它将使用路线2。在web.php中他们无论如何都要做
之类的事情if(Route::get('/{url}', 'MenuController@menu')) is null use
`Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');`
现在在我的web.php中我这样做
Route::get('/{url}', 'MenuController@menu');
Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');
当我去/食物它将找不到页面。
更新
在我的控制器中我试试这个
try {
// if find url
}
} catch (\Exception $e) {
//if not find url
return redirect()->route('promotiondetail', $url);
}
并且它返回错误重定向了你太多次
更新3
$ url = food
答案 0 :(得分:3)
你的问题是当你使用
时Route::get('/{url}', 'MenuController@menu');
Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');
您有相同的请求,因为{url}或{name}是可选参数,会发生的情况是它始终与第一种情况相匹配。最好的解决方案是使用这部分代码:
Route::get('/menu', 'MenuController@menu');
Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');
你应该始终拥有最后只有可选参数的那个,否则它将始终首先执行,因为它将匹配。你应该记住的是,使用/{name}
它会匹配任何东西,它就像一个变量,可以包含一个数字,也可以是一个字符串,例如一个url可能是domain/{anything}
。如果您使用/name
,则只有在您提出domain/name
请求时才会匹配。
您可能需要阅读Laravel routing以获取有关路由的更多信息。
答案 1 :(得分:1)
你遇到的问题是两条路线基本相同,/ {something}。
你有几个解决方案 首先,整理你的路线,使它们略有不同,使它们彼此不匹配并纠正顺序 例如;
Route::get('/promo/{name}', 'HomeSlideviewController@index')->name('promotiondetail');
Route::get('/{url}', 'MenuController@menu')->name('menu');
另一个可能对您有用的解决方案是首先放置promotiondetail路由,并检查相同名称,如果没有,则重定向到另一个控制器。所以在HomeSlideviewController的索引函数中,尝试类似于;
public function index($name) {
if ($name !== 'whatever you want it not to be') {
return redirect()->route('menu);
}
// continue
}