سؤال

أنا جديد على 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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top