हम ड्रुपल 8 से शुरू करते हैं और बहुत जल्दी हम अपनी पहली समस्या में भाग गए।
मुझे Drupal 8 में मौजूदा फॉर्म को कैसे बदलना चाहिए?
हमें नोड फॉर्म को दूसरे पेज पर रीडायरेक्ट करने के लिए सेव मेथड को बदलने की जरूरत है। हम नोड फॉर्म को मल्टीस्टेप फॉर्म की तरह बनने के लिए बदलना चाहते हैं। उपयोगकर्ता द्वारा नई सामग्री बनाए जाने के बाद वे कुछ और जानकारी प्राप्त करने के लिए एक नए रूप (हम बनाए गए) पर पुनर्निर्देशित हो जाते हैं।
हमने अपनी समस्या को हल करने में मदद की hook_entity_type_alter()
।
function mymodule_entity_type_alter(&$entity_info) {
$handlers = $entity_info['node']->get('handlers');
$handlers['form']['default'] = 'Drupal\mymodule\Form\MyExtendedNodeForm';
$handlers['form']['edit'] = 'Drupal\mymodule\Form\MyExtendedNodeForm';
$entity_info['node']->set('handlers', $handlers);
}
फिर हमने एक नया फॉर्म क्लास बनाया जो नोड फॉर्म को बढ़ाता है और सेव विधि को बदलता है।
class MyExtendedNodeForm extends NodeForm {
public function save(array $form, FormStateInterface $form_state) {
parent::save($form, $form_state);
$node = $this->entity;
$form_state->setRedirect('entity.regions.add_form', ['nid' => $node->id()]);
}
}
यह पूरी तरह से काम करता है, लेकिन क्या यह अच्छा है? यदि कोई अन्य मॉड्यूल ऐसा ही करता है, तो हमारा कोड अब निष्पादित नहीं होता है।
save()
विधि में परिवर्तन " वास्तव में क्या है। क्या इसका मतलब है कि डेटा को सहेजने के तरीके को बदलना, या सिर्फ एक रीडायरेक्ट करना है? पहले मामले में, उत्तर अधिक जटिल है।
hook_form_alter()
। यदि आपको केवल फॉर्म को पुनर्निर्देशित करने की आवश्यकता है, तो यह एक फॉर्म सबमिशन हैंडलर जोड़ने के लिए पर्याप्त है जो रीडायरेक्ट करता है।