Может ли кто-то умный делиться шаблоном проектирования, которым они пользуются, чтобы избежать этой основной и общей проблемы параллелизма в Doctrine \ Symfony?Как безопасно использовать UniqueEntity (на сайтах с более чем одним одновременным пользователем)
Сценарий: У каждого пользователя должно быть уникальное имя пользователя.
Ошибка Решение:
- Добавить UniqueEntity ограничение к объекту пользователя.
- Следуйте за pattern suggested in Symfony's docs: Используйте компонент Form для проверки потенциального нового пользователя. Если это действительно, продолжайте.
Почему он не: Между проверки и сохраняющиеся пользователя, имя пользователя может быть занято другим пользователем. Если это так, Doctrine генерирует исключительное исключение UniqueConstraintViolationException, когда оно пытается сохранить нового пользователя.
Вы можете создать его в начале процесса только с именем пользователя, когда это подтверждено, поэтому он не может быть принято кем-то другим? –
@ Антония Томпсон, спасибо за ваш вклад. Минимизация времени между проверкой и сохранением уменьшит частоту. Я надеюсь, что его можно устранить. –
То, что я имею в виду, это то, что он может быть частью проверки, поэтому, если Doctrine выбрасывает UniqueConstraintViolationException, тогда имя пользователя является недопустимым, и вы делаете выбор другим –