賞金將在 4 天后到期。此問題的答案有資格獲得 50聲望賞金。 talhaamir希望引起對這個問題的更多關注。
我想在內核終止后運行繁重的負載來散列用戶的密碼。
我在控制器中有這個:
public function insert(Request $request): Response
{
...
// listener to update passwords
$this->eventDispatcher->addListener(KernelEvents::TERMINATE, function () use ($users) {
foreach ($users as $user) {
$this->hashPassword($user); //for 100 users will take 40 seconds
}
});
return $this->redirectToRoute('some_route');
}
用戶被重定向到新路由,密碼在資料庫中進行哈希處理。但問題不在于所有密碼都經過哈希處理。似乎中途停了下來。
它與執行時間有關嗎?如果是,我該如何繞過它?不改變php執行時間。
謝謝。
uj5u.com熱心網友回復:
您的問題意味著執行時間正在停止您的行程,并且您的存盤引擎不尊重 ACID(原子性、一致性、隔離性和持久性)屬性。您的請求不受交易保護。
首先,我建議你使用事務并在流程結束時提交它,因為只更新一些資料是非常危險的。
然后,一個“壞”的解決方案是增加執行時間。
但最好的解決方案是使用異步訊息。您可以使用 Symfony Messenger 發送異步訊息。Fabien Potencier 寫的 Symfony Book在本章中解釋了如何做到這一點。Fabien 向我們展示了如何檢查郵件是否為垃圾郵件。您只需對所有未散列的密碼進行散列處理,而不是檢查訊息。在這個信使中,增加執行時間并不危險。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521205.html
上一篇:執行命令時找不到PDO驅動程式
下一篇:排序與Doctrine的最大關系
