Symfony - تحديث العمود الفريد - مشكلة التحقق من الصحة
-
02-10-2019 - |
سؤال
أنا جديد على Symfony Framework وواجهت مشكلة في التحقق من صحة النموذج.
أرغب في تحديث البيانات في DB بما في ذلك العمود الفريد ، ولكن إذا لم يتغير عمود فريد هذا. لذلك ، إذا قام أحد المستخدمين بحفظ اسم نطاقه ، فلا يمكن لأي شخص آخر استخدامه ، لكنه يمكنه تغييره في المستقبل.
يبدو أن التحقق من صحة النموذج يقارن العمود الفريد ليس فقط بالصفوف الأخرى ، ولكن أيضًا إلى حد ذاته. لذلك إذا لم يغير المستخدم العمود ويحفظ النموذج ، فسيتم إرجاع الخطأ.
ما هو التحقق من الصحة الذي يجب أن أستخدمه للحفاظ على العمود الفريد ، ولكن حر في التغيير؟
المحلول
إذا كنت تستخدم العقيدة والمقاومة sfvalidatordoctrineunique, ، يجب أن تعمل على النحو المقصود.
IE يتحقق إذا كنت تقوم بتحديث كائن. انظر السطر 102.
نصائح أخرى
قد يكون هذا سؤالًا قديمًا ، لكنني سأضيف المزيد من التفاصيل حول سبب هذا الخطأ لأنني واجهت أيضًا المشكلة ووجدت حلاً.
في حالتي ، لم يعود المدقق إلى طريقة ISUPDATE () ، وكان ذلك لأن حقل "المعرف" كان غير محدد.
لتجنب هذه المشكلة ، قم بإزالة "المعرف" من الحقول غير المستقرة وقم بتغييره إلى SFWidgetForminPuthidden.
لجعل isUpdate () عليك استخدام $ this-> form-> setPostValidator () ؛
$ this-> ValitoratorSchema-> setPostValidator (sfvalidatordoctrineunique جديد (صفيف ('model' => 'model' ، 'column' => '' column_name '))) ؛
أنت على حق جزئيًا ، لكن المشكلة هي ، إذا أراد شخص ما تغيير الحقل الآخر ، على الرغم من فريدة من نوعها ، تبقى كما هي ، ثم تظل المشكلة. لا أرى أي طريقة لمنع ذلك ، بصرف النظر عن القيام بذلك بنفسك:/
يجب أن تستخدم merge
بدلاً من persist
فمثلا:
$entityManager = $this->getDoctrine()->getManager();
$loadedBrand = $entityManager->merge($loadedBrand);
$entityManager->flush();