路由名称前缀

路由《Laravel 8 中文文档》

name 方法可以用给定字符串作为组中的每个路由名的前缀。 例如,你可能想要用 admin 作为所有分组路由的前缀。因为给定字符串的前缀与指定的路由名完全一致,所以我们一定要提供末尾 . 字符在前缀中

其中“因为给定字符串的前缀与指定的路由名完全一致,所以我们一定要提供末尾 . 字符在前缀中:”,这句话具体是什么意思呢?

不加点,除了可读性外,暂未发现有什么实际的问题。

Route::name('admin.')->group(function () {
    Route::get('/users', function () {
        // Route assigned name "admin.users"...
    })->name('users');
});
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

@MArtian

报错是因为没有正确使用:

Route::name('admin')->group(function () {
    Route::get('/users', function () {
       // 不加点,使用时也不用加点
       route('adminusers');
    })->name('users');
});

Route::name('admin.')->group(function () {
    Route::get('/users', function () {
       // 加点,使用时也加点
       route('admin.users');
    })->name('users');
});

目前为止,“.”的存在,我理解就只是为了提高可读性,只是文档上的描述太费解了,让人误以为“.”是定性要求。我完全可以这样:

Route::name('admin>')->group(function() {
    Route::get('users', function () {
        //  可以随便定义,但用“.”的可读性更强
       echo \route('admin>users');
    })->name('users');
});
2年前 评论
MArtian 2年前
讨论数量: 9

给你举个例子就明白了,正常声明路由

Route::get('/get')->name('users.get');
Route::get('users/edit')->name('users.edit');
Route::post('users/update')->name('users.update');
...

使用路由组声明

Route::name('users.')->group(function(){
    Route::get('/get')->name('get');
    Route::get('/edit')->name('edit');
    Route::post('/update')->name('update');
});

这两段代码是一样的功能,users.get 中的点是用于区分层级的,至于你为什么没加点也没问题,可能是 Laravel 框架在注册路由时自动加上了。

2年前 评论
topwms (楼主) 2年前
MArtian (作者) 2年前

感觉说的意思是,如果你想要 admin.* 这样格式的路由命名, 那么就应该加点 .:

Route::name('admin.')->group(function () {
    //
});

命名路由唯一就可以了

2年前 评论

@MArtian

file

通过命令查看路由,并没有自动加“.”。 查看了Route、Router的原码,暂没发现在对“.”的处理。如果你有看到,麻烦类文件名发我下。

2年前 评论

@topwms 我理解错误,声明路由组的时候,必须是要加 . 的,这里 Laravel 不会自动处理这部分,看代码测试

Route::name('admin')->group(function () {
    Route::get('/users', function () {
        // Route assigned name "admin.users"...
    })->name('users');
});

来访问一下

route('admin.users')

file

报错了,提示路由未找到,加上 . 就找到了,如果不加 . 的话,访问的路由别名应该是

route('adminusers')

至于你说的没报错,应该是执行有问题,这里是肯定会报错的。

其实 name 中添加 . 和不添加,只是从代码可读性上来看更舒服一些,这里的 . 沿用的是文件夹 balde 路径的写法。

2年前 评论

是除了好看没啥用了,,,也可以说是一种约定的命名方式

2年前 评论

@MArtian

报错是因为没有正确使用:

Route::name('admin')->group(function () {
    Route::get('/users', function () {
       // 不加点,使用时也不用加点
       route('adminusers');
    })->name('users');
});

Route::name('admin.')->group(function () {
    Route::get('/users', function () {
       // 加点,使用时也加点
       route('admin.users');
    })->name('users');
});

目前为止,“.”的存在,我理解就只是为了提高可读性,只是文档上的描述太费解了,让人误以为“.”是定性要求。我完全可以这样:

Route::name('admin>')->group(function() {
    Route::get('users', function () {
        //  可以随便定义,但用“.”的可读性更强
       echo \route('admin>users');
    })->name('users');
});
2年前 评论
MArtian 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!