php Laravel动态路由名称取决于可选的路由参数

lhcgjxsq  于 2023-06-20  发布在  PHP
关注(0)|答案(1)|浏览(136)

在Laravel 10中,我的路由结构如下:

Route::group(['middleware' => ['permission:edit-settings']], function () {
    $module_name = 'settings';
    $controller_name = 'SettingController';

    Route::get("$module_name/{settingModule?}", "$controller_name@index")
});

我试过

Route::get("$module_name/{settingModule?}", "$controller_name@index")->name(function ($parameters) {
    $settingModule = $parameters['settingModule'] ?? 'settings';
    return $settingModule . 'index';
});

我的要求是根据路由参数动态生成路由名称。但它抛出错误Object of class Closure could not be converted to string
感谢你的帮助。
先谢谢你了。

66bbxpm5

66bbxpm51#

在Laravel中,可以使用name()方法动态生成路由名称。但是,不能直接将闭包传递给name()方法。要实现基于route参数的动态路由名称,可以使用as()方法。
下面是一个如何实现此目标的示例:

Route::group(['middleware' => ['permission:edit-settings']], function () {
    $module_name = 'settings';
    $controller_name = 'SettingController';

    Route::get("$module_name/{settingModule?}", "$controller_name@index")
        ->as(function ($parameters) use ($module_name) {
            $settingModule = $parameters['settingModule'] ?? 'settings';
            return $settingModule . '.' . $module_name . '.index';
        });
});

在本例中,as()方法用于动态生成路由名称。它接受一个字符串作为参数,因此您可以将路由参数和其他值连接起来,形成路由的唯一名称。在这种情况下,路由名称将生成为setting.indexsetting.someParamValue.index,具体取决于settingModule参数。
请注意,路由名称在整个应用程序中应该是唯一的,以避免冲突。

相关问题