it-swarm.asia

كيف أغيّر معالج إرسال النموذج؟

لسبب ما ، أحتاج إلى استبدال بعض الأحرف (إن وجدت) في كل حقول نصية بأي شكل من الأشكال قبل تخزينها في قاعدة البيانات. وبعبارة أخرى ، أحتاج إلى خطاف يمكنني فيه الحصول على جميع البيانات المقدمة واستبدال شخصياتهم.
لقد وجدت هذا الحل:

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

لكن هذه ليست فكرة جيدة لأنني يجب أن أعتني ببقية تقدم التقديم أيضًا. أنا فقط بحاجة إلى استبدال بعض الشخصيات. هل هناك أي ربط للقيام بذلك؟ ما هي الحلول؟

16
Pedram Behroozi

$form['#submit'] يخزن مجموعة من معالجات تقديم النموذج. باستخدام الرمز الذي قدمته ، يمكنك استبداله بإضافة الرمز الخاص بك فقط. للحصول على النتيجة التي تريدها ، يجب عليك إضافة معالج الإرسال كعنصر أول في الصفيف مثل هذا:

array_unshift($form['#submit'], 'mymodule_custom_submission');

قد يكون الحصول على القيم الصحيحة في النماذج الصحيحة واستبدال بعض الأحرف مشكلة أكبر في حد ذاته. قد ترغب في تضييق النماذج/الحقول التي تحتاج إلى تغييرها للتأكد من عدم كسر أي شيء.

22
Madis

ربما سيكون من الأفضل إجراء هذه التعديلات أثناء التحقق من الصحة بدلاً من التقديم كما هو مقترح بواسطة Drupal (انظر دالة form_set_value على https://api.drupal.org/api/drupal/ يتضمن! form.inc/function/form_set_value/7 ).

لذلك ، في hook_form_alter ، يمكنك حتى إضافته إلى نهاية وظائف التحقق الحالية إذا كنت ترغب في:

$form['#validate'][] = 'mymodule_custom_validation';
2
Vishnar Tadeleratha