우리는 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);
}
그런 다음 노드 양식을 확장하고 save 메소드를 변경하는 새 양식 클래스를 작성했습니다.
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(). 양식을 리디렉션해야하는 경우 리디렉션을 수행하는 양식 제출 핸들러를 추가하면 충분합니다.