我是 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 和 action {{ route('Admin_Pagina_CreatePage') }}
答案 0 :(得分:3)
我可以在同一个控制器中使用相同的 url 但不同的名称指向不同的函数吗?
没有。在确定 Laravel 路由的唯一性时,HTTP 方法和 URI 充当组合主键。其他一切都只是附加到该唯一条目的元数据。
在您的示例中,第二个 Route::post('/admin/pagina')
覆盖第一个,因为您定义了相同的“ID”对 POST /admin/pagina
。
我不确定您希望如何将相同的 HTTP 方法和 URI 用于两个单独的控制器操作。如果您希望根据请求正文中包含的内容对它们进行不同的路由,这与 Laravel 的路由工作方式相冲突(在不使用请求正文的情况下找到和调度路由)。
通常对于删除,您会在路由中使用该 HTTP 方法:
Route::delete('/admin/pagina' [/* ... */]);
这可以与 form method spoofing 配对以欺骗普通表单请求(它不支持 DELETE
)无论如何都要找到合适的路由。
答案 1 :(得分:0)
与您的问题无关,这只是一个建议,您可以使用 Route Groups 并为该组分配一个中间件,以避免重复为每个路由分配一个中间件。
例如
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');
});