Chúng tôi chỉ mới bắt đầu với Drupal 8 và rất nhanh chúng tôi gặp vấn đề đầu tiên.
Làm thế nào tôi nên thay đổi một hình thức hiện có trong Drupal 8?
Chúng ta cần thay đổi phương thức lưu cho dạng nút để chuyển hướng đến một trang khác. Chúng tôi muốn thay đổi hình thức nút để trở thành một cái gì đó giống như một hình thức nhiều bước. Sau khi người dùng tạo nội dung mới, họ sẽ được chuyển hướng đến một hình thức mới (chúng tôi đã tạo) để có thêm một số thông tin.
Chúng tôi đã giải quyết vấn đề của chúng tôi khi thực hiện 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);
}
Sau đó chúng tôi đã tạo một lớp biểu mẫu mới mở rộng biểu mẫu nút và thay đổi phương thức lưu.
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()]);
}
}
Điều này hoạt động hoàn hảo, nhưng nó là tốt? Nếu một mô-đun khác làm điều tương tự, mã của chúng tôi sẽ không được thực thi nữa.
save()
phương pháp" thực sự có nghĩa là gì. Có nghĩa là thay đổi cách lưu dữ liệu, hoặc chỉ thực hiện chuyển hướng? Trong trường hợp đầu tiên, câu trả lời phức tạp hơn.
hook_form_alter()
. Nếu bạn chỉ cần chuyển hướng biểu mẫu, đủ để thêm trình xử lý gửi biểu mẫu thực hiện chuyển hướng.