【问题标题】:Laravel routes same url but different nameLaravel 路由相同的 url 但名称不同
【发布时间】:2021-05-29 06:38:34
【问题描述】:

我是 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') }} 方法创建一个页面

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    与您的问题无关,只是一个建议,您可以使用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');
    });
    

    【讨论】:

      【解决方案2】:

      我是否允许在同一个控制器中使用相同的 url 但不同的名称指向不同的函数?

      没有。在确定 Laravel 路由的唯一性时,HTTP 方法和 URI 充当组合主键。其他所有内容都只是附加到该唯一条目的元数据。

      在您的示例中,第二个Route::post('/admin/pagina') 覆盖第一个,因为您定义了相同的“ID”对 POST /admin/pagina

      我不确定您希望如何将相同的 HTTP 方法和 URI 转到两个单独的控制器操作。如果您希望根据请求正文中包含的内容对它们进行不同的路由,那将与 Laravel 的路由工作方式相冲突(在不使用请求正文的情况下查找和调度路由)。

      通常对于删除,您会在路由中使用该 HTTP 方法:

      Route::delete('/admin/pagina' [/* ... */]);
      

      这可以与form method spoofing 配对以欺骗普通表单请求(不支持DELETE)以找到合适的路由。

      【讨论】:

        猜你喜欢
        • 2013-10-09
        • 1970-01-01
        • 2017-04-05
        • 1970-01-01
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        • 2018-11-04
        相关资源
        最近更新 更多