Drupal 8 ile yeni başladık ve çok hızlı bir şekilde ilk sorunumuzla karşılaştık.
Drupal 8'de mevcut bir formu nasıl değiştirmeliyim?
Başka bir sayfaya yönlendirme yapmak için düğüm formunun kaydetme yöntemini değiştirmemiz gerekiyor. Çok adımlı bir form haline gelmek için düğüm formunu değiştirmek istiyoruz. Kullanıcı yeni içerik oluşturduktan sonra, daha fazla bilgi almak için yeni bir forma (oluşturduk) yönlendirilir.
Sorun uygulamamızı çözdük 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);
}
Daha sonra düğüm formunu genişleten ve save yöntemini değiştiren yeni bir form sınıfı oluşturduk.
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()]);
}
}
Mükemmel çalışıyor, ama iyi mi? Başka bir modül de aynısını yaparsa, kodumuz artık çalıştırılmaz.
save()
yöntemi değiştirmenin " gerçekte ne anlama geldiğini açıkça belirtmelidir . Bu, verilerin kaydedilme biçimini değiştirmek mi yoksa yalnızca bir yönlendirme yapmak mı demek? İlk durumda, cevap daha karmaşıktır.
hook_form_alter()
. Yalnızca formu yeniden yönlendirmeniz gerekiyorsa, yönlendirmeyi yapan bir form gönderme işleyicisi eklemek yeterlidir.