我是Laravel的新手,我正试图创建一个函数来创建数据库行,但我的路由不工作。我现在在我的web。php文件中有这个:
Route::get('/admin/pagina', [PaginaOverzichtController::class, 'index'])
->name('Admin_Pagina_Overzicht')
->middleware('auth');
Route::post('/admin/pagina', [PaginaOverzichtController::class, 'CreatePage'])
->name('Admin_Pagina_CreatePage')
->middleware('auth');
Route::post('/admin/pagina', [PaginaOverzichtController::class, 'DeletePage'])
->name('Admin_Pagina_DeletePage')
->middleware('auth');
但是当我去/admin/pagina,我得到一个Route [Admin_Pagina_CreatePage] not defined
错误。
我允许有相同的URL,但不同的名称指向不同的功能在同一控制器?如果没有,是否有最佳实践方法来做到这一点?
^我在我的页面上有一个表单,应该创建一个页面的方法post和动作{{ route('Admin_Pagina_CreatePage') }}
我允许有相同的url,但不同的名称指向不同的功能在同一控制器?
。在确定Laravel路由的唯一性时,HTTP方法&URI充当组合主键。其他的都只是附加到那个唯一条目的元数据。
在您的示例中,第二个Route::post('/admin/pagina')
覆盖了第一个,因为您已经定义了相同的"ID"对POST /admin/pagina
.
我不确定你如何期望有相同的HTTP方法和URI去两个单独的控制器动作。如果你希望根据请求体中包含的内容对它们进行不同的路由,这与Laravel的路由工作方式相冲突(路由是在不使用请求体的情况下发现和分发的)。
通常对于删除,您将在路由中使用HTTP方法:
Route::delete('/admin/pagina' [/* ... */]);
这可以与表单方法欺骗配对,以欺骗正常的表单请求(不支持DELETE
),以找到合适的路由。
与你的问题无关,这只是一个建议,你可以使用路由组并为该组分配一个中间件,以避免重复为每条路由分配一个中间件。
。
Route::middleware(['auth'])->group(function(){
Route::get('/admin/pagina', [PaginaOverzichtController::class, 'index'])->name('Admin_Pagina_Overzicht');
Route::post('/admin/pagina', [PaginaOverzichtController::class, 'CreatePage'])->name('Admin_Pagina_CreatePage');
Route::post('/admin/pagina', [PaginaOverzichtController::class, 'DeletePage'])->name('Admin_Pagina_DeletePage');
});