Laravel 5.5 将控制器传递给路由组

Laravel 5.5 passing controllers to routes groups

我不知道这是否可能。假设我们有 3 个路由组来创建前缀……全部来自 root;所以,像下面这样的东西可能会有问题。

Route::group([
        'prefix' => '{something}',
        'middleware' => ['web', 'auth']
    ], function() {
});

所以,有 n 个路由组。每个组都有相同的一组路由模式。唯一的区别是用于每个组的控制器。

<?php

Route::group([
        'prefix' => 'prefix1',
        'middleware' => ['web', 'auth']
    ], function() {
    $controller = '\Path\To\Controller';
    Route::get('/', $controller.'@index');
    Route::get('/{object}', $controller.'@handleObject');
});

Route::group([
        'prefix' => 'prefix2',
        'middleware' => ['web', 'auth']
    ], function() {
    $controller = '\Path\To\Controller2';
    Route::get('/', $controller.'@index');
    Route::get('/{object}', $controller.'@handleObject');
});

Route::group([
        'prefix' => 'prefix3',
        'middleware' => ['web', 'auth']
    ], function() {
    $controller = '\Path\To\Controller3';
    Route::get('/', $controller.'@index');
    Route::get('/{object}', $controller.'@handleObject');
});

我正在寻找的东西可以让我从路由组转到其他东西,将控制器传递给它。

这可能吗?我还缺少其他选择吗?

本质上,路由组由多个子组和路由组成,实际上,真的不想仅仅为了更改控制器而复制和粘贴路由。

更新

几乎希望能够做到这样的事情,我很确定这是不可能的。

Route::group([
        'prefix' => ['prefix1', 'prefix2', 'prefix3'],
        'middleware' => ['web', 'auth']
    ], function() {
    $controller = null;
    if ($prefix == '...') {
        $controller = '\Path\To\Controller3';

    } else if ($prefix '...') {
        ...

    }
    Route::get('/', $controller.'@index');
    Route::get('/{object}', $controller.'@handleObject');
});

是的,有可能。

你只需要一个数组和逻辑。对于下面的示例,我在我开发的服务提供商中使用了一个配置文件。然后,只需遍历数组,Laravel 的路由器每次都会这样做。

// /config/service-config.php
$prefixes = [
    'tiles',
    'files',
    'kites',
    'foos'
];

// web.php
$controller = '\Path\To\Controller';

if (!is_null(config('service-config.prefixes'))) {
    foreach (config('service-config.prefixes') as $prefix) {    
        Route::group([
            'prefix' => $prefix
        ], function() use ($controller) {
            Route::post('/', $controller.'@addEmailAddress');
        });

        Route::group([
            'prefix' => $prefix .'/{foo}/bar'
        ], function() use ($controller) {
            // ...
        });
    }    
}

结果:

/tiles
/tiles/{foo}/bar
/files
/files/{foo}/bar
/kites
/kites/{foo}/bar
/foos
/foos/{foo}/bar

每个人都在该控制器中使用相同的控制器和方法。