【问题标题】:Laravel 5.5 passing controllers to routes groupsLaravel 5.5 将控制器传递给路由组
【发布时间】:2017-09-07 10:33:01
【问题描述】:

我不知道这是否可能。假设我们有 3 个路由组来创建前缀……全部来自根目录;因此,类似以下的内容可能会出现问题。

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');
});

【问题讨论】:

    标签: php laravel-routing laravel-5.4


    【解决方案1】:

    是的,这是可能的。

    您只需要一个数组和逻辑。对于下面的示例,我使用我开发的服务提供商中的配置文件。然后,只需遍历数组,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
    

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

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 2016-05-16
      • 2017-01-12
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      相关资源
      最近更新 更多