เราเพิ่งเริ่มต้นด้วย Drupal 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()
สนับสนุน หากคุณเพียงต้องการเปลี่ยนเส้นทางของแบบฟอร์มก็พอที่จะเพิ่มตัวจัดการการส่งแบบฟอร์มที่เปลี่ยนเส้นทาง