我的 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}
之类的内容并不是什么大问题,但我仍然很好奇:即使我命名路由并使用不同的路由,这种混乱怎么会发生?蛞蝓?
预先感谢您的帮助!
我尝试过的:我检查了路线是否正在被访问,但事实并非如此。然后我尝试以不同的方式命名它们,这有效,但它仍然让我感到困惑,因此出现了这个问题。
您的两个路由定义都使用具有相同 HTTP 的动态参数(
{ticket}
和 {id}
),并且它们都以 /tickets
开头。 Laravel 按顺序匹配路由,并尝试将 URL 与第一个适合的模式匹配。由于两条路线遵循相同的模式,Laravel 可能与第一条路线匹配,因此认为第二条路线也应该由它处理。
在您的情况下,即使您以不同的方式命名路由并使用不同的控制器,路由模式仍然相同,从而导致歧义。
因此,即使您使用名称助手调用路由,Laravel 也会查找路由文件,并匹配与该模式匹配的第一个 URL。