在Laravel中的单个路由组中添加多个前缀

时间:2016-10-26 06:04:13

标签: laravel-5 routes

有没有办法在Laravel的单个路由组中添加多个前缀?

Route::group(['prefix' => 'prefix'], function (){
   Route::get('hello', 'HelloController@sayHello');
});

我尝试使用竖管添加 -

Route::group(['prefix' => 'prefix1|prefix2'], function (){
   Route::get('hello', 'HelloController@sayHello');
});

还尝试使用array-

Route::group(['prefix' => ['prefix1', 'prefix2']], function (){
   Route::get('hello', 'HelloController@sayHello');
});

但没有运气。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

您是否尝试过where这样的方法调用:

Route::group(['prefix' => '{prefix}'], function (){
    Route::get('hello', 'HelloController@sayHello')->where('prefix', 'prefix1|prefix2');
});

<强>更新

如果你想以更有效的方式做到这一点,你可以尝试例如:

Route::group(['prefix' => '{prefix}'], function (){
    $routes = [];
    $routes[] = Route::get('hello', 'HelloController@sayHello');
    $routes[] = Route::get('other', 'HelloController@other');
    foreach($routes as $route) {
        $route->where('prefix', 'prefix1|prefix2');
    }
});

但这只是我的第一个想法。也许你可以找到另一个更好的。

答案 1 :(得分:1)

让我再添加一个例子,仅用于处理偶然情况:

// The Route Name point to multiple prefixes 
// according to locale using the same Controller

$contactRoutes = function () {
    Route::get('', ['uses' => 'ContactController@index', 'as' => 'contact');
    Route::post('', ['uses' => 'ContactController@send', 'as' => 'contact.send');
};
switch (env('APP_LOCALE')) {
    case 'pt': 
        Route::group(['prefix' => 'contato'], $contactRoutes);
        break;
    case 'es':
        Route::group(['prefix' => 'contacto'], $contactRoutes);
        break;
    default: //en
        Route::group(['prefix' => 'contact'], $contactRoutes);
        break;
}