Kami baru saja memulai dengan Drupal 8 dan sangat cepat kami mengalami masalah pertama kami.
Bagaimana saya harus mengubah formulir yang ada di Drupal 8?
Kita perlu mengubah metode simpan untuk bentuk simpul untuk melakukan redirect ke halaman lain. Kami ingin mengubah bentuk simpul menjadi sesuatu seperti bentuk multistep. Setelah pengguna membuat konten baru, mereka akan dialihkan ke formulir baru (kami buat) untuk mendapatkan informasi lebih lanjut.
Kami memecahkan masalah penerapan kami 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);
}
Kami kemudian membuat kelas bentuk baru yang memperluas bentuk simpul dan mengubah metode simpan.
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()]);
}
}
Ini bekerja dengan sempurna, tetapi apakah itu baik? Jika modul lain melakukan hal yang sama, kode kami tidak dapat dieksekusi lagi.
save()
metode" sebenarnya. Apakah itu berarti mengubah cara data disimpan, atau hanya melakukan redirect? Dalam kasus pertama, jawabannya lebih kompleks.
hook_form_alter()
. Jika Anda hanya perlu mengarahkan ulang formulir, itu sudah cukup untuk menambahkan penangan pengiriman formulir yang melakukan redirect.