Laravel 路由相同的 url 但名称不同

时间:2021-02-26 22:00:46

标签: php laravel

我是 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') }}

方法创建一个页面

2 个答案:

答案 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');
});