我想了解有什么区别,因为......我找不到答案。
有一条路线
Route::group([
'middleware' => ['api'],
], function () {
Route::prefix('api/verson')->name('api.version.')->group(function () {
Route::prefix('project')->name('project')->group(function () {
Route::get('worker', [NameController::class, 'worker']);
})
})
});
在路线列表中,它看起来像这样:
Method | URI | Name |
GET|HEAD | api/version/project/worker | api.version.project |
当我尝试添加另一条路线时
Route::get('worker-list', [NameController::class, 'list']);
出现错误,表明 api.version.project 路由已添加。那些。原来名字已经被保留了。
但是,如果路线看起来像这样
Route::group([
'middleware' => ['api'],
], function () {
Route::prefix('api/verson')->name('api.version.')->group(function () {
Route::prefix('project')->name('project.')->group(function () {
Route::get('worker', [NameController::class, 'worker']);
})
})
});
然后新路线将毫无问题地添加,路线列表将如下所示
Method | URI | Name |
GET|HEAD | api/version/project/worker |api.version.project. |
GET|HEAD | api/version/project/worker-list |api.version.project.generated::WIlQFglGb43vStI|
任何没有注意到的人->name('project')
都想->name('project.')
了解其中的区别。该点是否允许您为相似的路线生成唯一的名称?
当您定义带有名称前缀的路由组时,Laravel 使用此前缀在组内生成路由名称。它的工作原理如下:
没有点(“项目”):
在本例中,名称前缀为“project”,末尾不带点。 Laravel 尝试将名称“project”分配给组内的两条路由。这会产生冲突,因为路由名称必须是唯一的。因此,当您尝试添加第二条路由时,您会收到一条错误消息,指出路由名称“api.version.project”已在使用中。
带点(“项目”。):
通过在末尾添加一个点(“project.”),您可以告诉 Laravel 那个“project”。是路由名称的前缀,而不是全名。这允许 Laravel 为组内的每个路由添加唯一的后缀或子名称。如果您没有为单个路由指定名称,Laravel 将自动生成一个唯一的名称以避免冲突。
这是方法(名称与组方法属性中的名称相同)
这就是为什么这样写更正确
现在你明白了吗?如果你写的时候不带点,那么这个名称会分配给每个子元素,如果带点,那么会调用生成并创建一个唯一的名称。
更多了解请查看