Laravel Route::group[] 工作不正常

Laravel Route::group[] not working correctly

我有一些路由,我想按名称、前缀和中间件组合在一起。由于某种原因,Route::group 函数的 'name' 选项未正确尾随名称。我的代码不正确,或者这是一个错误?下面是路由组定义。

Route::group(['name' => 'admin.', 'prefix' => 'admin',
    'middleware' => 'admin'], function () {
    Route::get('/', function () {
        return 'the index page';
    })->name('index');

    Route::get('/another', function () {
        return 'another page';
    })->name('another');
});

然后我清除并缓存了路由。这是列表。

+--------+----------+------------------------+-----------------------------+------------------------------------------------------------------------+------------+
| Domain | Method   | URI                    | Name                        | Action                                                                 | Middleware |
+--------+----------+------------------------+-----------------------------+------------------------------------------------------------------------+------------+
|        | GET|HEAD | admin                  | index                       | Closure                                                                | web        |
|        |          |                        |                             |                                                                        | admin      |
|        | GET|HEAD | admin/another          | another                     | Closure                                                                | web        |
|        |          |                        |                             |                                                                        | admin      |

我希望在名称中看到 admin.index、admin.another、...

但是,如果我使用 Route::name 函数,它将正常工作。

Route::name('admin.')->group(function () {
    Route::prefix('admin')->group(function () {
        Route::middleware('admin')->group(function () {
            Route::get('/', function () {
                return 'the index page';
            })->name('index');

            Route::get('/another', function () {
                return 'another page';
            })->name('another');
        });
    });
});

+--------+----------+------------------------+-----------------------------+------------------------------------------------------------------------+---------------+
| Domain | Method   | URI                    | Name                        | Action                                                                 | Middleware    |
+--------+----------+------------------------+-----------------------------+------------------------------------------------------------------------+---------------+
|        | GET|HEAD | admin                  | admin.index                 | Closure                                                                | web           |
|        |          |                        |                             |                                                                        | admin         |
|        | GET|HEAD | admin/another          | admin.another               | Closure                                                                | web           |
|        |          |                        |                             |                                                                        | administrator |

您应该将 name 数组条目替换为 as,如下所示:

Route::group(['as' => 'admin.', 'prefix' => 'admin',
    'middleware' => 'admin'], function () {
    Route::get('/', function () {
        return 'the index page';
    })->name('index');

    Route::get('/another', function () {
        return 'another page';
    })->name('another');
});

不过我相信您的第二种方法更具可读性。但请记住,没有必要为每个 属性 定义一个 group 方法,您可以简单地链接所有方法并在末尾定义一个 group 方法:

Route::name('admin.')
    ->prefix('admin')
    ->middleware('admin')
    ->group(function () {
        Route::get('/', function () {
            return 'the index page';
        })->name('index');

        Route::get('/another', function () {
            return 'another page';
        })->name('another');
    });