幼虫-路由组可选前缀不起作用

时间:2018-11-28 11:38:38

标签: php laravel routes router

我有一些按前缀分组的路由,如下所示。但是如果没有网址中的{lang},它将无法正常工作。

不带{lang}的网址将收到404错误。谁能猜出是什么问题?

Route::group(['namespace' => 'Site', 'prefix' => '{lang?}', 'where' => array('lang' => 'en|fa')], function()
{
 if (\Request::segment(1) != 'panel' || \Request::segment(1) != 'login')
 {
  $locale = \Request::segment(1);

  if(in_array($locale, ['fa', 'en'])) Illuminate\Support\Facades\App::setLocale($locale);
 }

/*
  Pages
*/
Route::get('/', 'HomeController@index') -> name('home');
Route::get('/about', 'AboutController@index') -> name('about');
Route::get('/portfolio', 'PortfolioController@index');
Route::get('/portfolio/{category_id}/cat', 'PortfolioController@indexWithCategory');
Route::get('/portfolio/loadmore/{category_id}/cat', 'PortfolioController@loadmore');
Route::get('/portfolio/loadmore', 'PortfolioController@loadmore');
Route::get('/portfolio/{id}/{title}', 'PortfolioController@show');
Route::get('/articles', 'ArticleController@index');
Route::get('/articles/{id}/', 'ArticleController@article_show');
Route::get('/articles/{id}/{title}', 'ArticleController@article_show');
Route::get('/blogs', 'ArticleController@blogs');
Route::get('/blogs/{id}', 'ArticleController@show');
Route::get('/blogs/{id}/{title}', 'ArticleController@show');
Route::get('/faq', 'ArticleController@faq');
Route::get('/contacts', 'ContactsController@index');
});

2 个答案:

答案 0 :(得分:0)

我认为问题出在可选的lang前缀。

只需将路线分为两类: 1.带有lang前缀

  1. 没有lang前缀

或者,最好在路由的末尾使用lang而不是将其用作前缀。

答案 1 :(得分:0)

不要在前缀中使用可选参数,前缀是关于在URL开头使用fix参数的,所以现在laravel路由不知道您的fix段到底是什么!使用此路由组,您可以将任何参数或字符串作为前缀发送给该路由,例如,该路由foo / about,bar / about,xxxx / about所有这些都转到about网址