it-swarm-ko.tech

양식 제출 핸들러를 어떻게 변경합니까?

어떤 이유로 든 모든 텍스트 필드의 일부 문자 (있는 경우)를 데이터베이스에 저장하기 직전에 어떤 형식 으로든 바꿔야합니다. 즉, 제출 된 모든 데이터를 가져 와서 문자를 바꿀 수있는 후크가 필요합니다.
이 솔루션을 찾았습니다.

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

그러나 나머지 제출 과정도 처리해야하기 때문에 이것은 좋은 생각이 아닙니다. 일부 문자 만 교체하면됩니다. 이걸 할 수있는 고리가 있습니까? 해결책은 무엇입니까?

16
Pedram Behroozi

$form['#submit']는 양식 제출 핸들러 배열을 저장합니다. 제공 한 코드를 사용하면 자신 만 추가하여 코드를 덮어 씁니다. 결과를 얻으려면 제출 핸들러를 다음과 같이 배열의 첫 번째 요소로 추가해야합니다.

array_unshift($form['#submit'], 'mymodule_custom_submission');

올바른 형식으로 올바른 값을 얻고 일부 문자를 바꾸는 것이 그 자체로 더 큰 문제 일 것입니다. 어떤 것도 깨지 않도록 변경해야 할 양식/필드를 좁힐 수 있습니다.

22
Madis

아마도 Drupal에서 제안한대로 제출하는 대신 검증하는 동안 이러한 수정을 수행하는 것이 좋습니다. ( https://api.drupal.org/api/drupal/ 포함! form.inc/function/form_set_value/7 ).

따라서 hook_form_alter에서 원하는 경우 기존 유효성 검사 함수 끝에 추가 할 수도 있습니다.

$form['#validate'][] = 'mymodule_custom_validation';
2