আমরা কেবল ড্রুপাল 8 দিয়ে শুরু করেছি এবং খুব দ্রুত আমরা আমাদের প্রথম সমস্যাটির মধ্যে চলে এসেছি।
ড্রুপাল 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()। আপনার যদি কেবল ফর্মটি পুনর্নির্দেশের প্রয়োজন হয় তবে এটি ফর্ম জমা হ্যান্ডলার যুক্ত করতে যথেষ্ট যা পুনঃনির্দেশ করে।