Laravel 与用于票务评论和更新的 POST 路由混淆

问题描述 投票:0回答:1

我的 Laravel 应用程序中有两条 POST 路由:一条用于评论票证,另一条用于更新票证。然而,我认为 Laravel 对于选择哪条路线感到困惑。我试图理解为什么会发生这种混乱,因此,我也有点困惑。

路线如下:

Route::post('/tickets/{ticket}', 'update')->name('tickets.update');
// <form action="{{ route('tickets.update', ['ticket' => $ticket->TicketId]) }}" method="POST">
Route::post('/tickets/{id}', [CommentController::class, 'store'])->name('comments.store');
// <form method="POST" action="{{ route('comments.store', ['id' => $ticket->TicketId]) }}">

我认为这两条路线都使用 ID 并不难理解,这可能就是造成混乱的原因。我认为命名路线并使用不同的 slugs 将有助于防止这个问题。

现在,虽然将注释的 POST 路由名称更改为类似

/comments/{id}
之类的内容并不是什么大问题,但我仍然很好奇:即使我命名路由并使用不同的路由,这种混乱怎么会发生?蛞蝓?

预先感谢您的帮助!

我尝试过的:我检查了路线是否正在被访问,但事实并非如此。然后我尝试以不同的方式命名它们,这有效,但它仍然让我感到困惑,因此出现了这个问题。

laravel
1个回答
0
投票

您的两个路由定义都使用具有相同 HTTP 的动态参数(

{ticket}
{id}
),并且它们都以
/tickets
开头。 Laravel 按顺序匹配路由,并尝试将 URL 与第一个适合的模式匹配。由于两条路线遵循相同的模式,Laravel 可能与第一条路线匹配,因此认为第二条路线也应该由它处理。

在您的情况下,即使您以不同的方式命名路由并使用不同的控制器,路由模式仍然相同,从而导致歧义。

因此,即使您使用名称助手调用路由,Laravel 也会查找路由文件,并匹配与该模式匹配的第一个 URL。

© www.soinside.com 2019 - 2024. All rights reserved.