it-swarm-vi.com

Làm thế nào để tôi thay đổi trình xử lý biểu mẫu?

Vì một số lý do, tôi cần thay thế một số ký tự (nếu tồn tại) trong mỗi trường văn bản dưới mọi hình thức ngay trước khi chúng được lưu trữ trong cơ sở dữ liệu. Nói cách khác, tôi cần một cái móc trong đó tôi có thể nhận được tất cả dữ liệu đã gửi và thay thế các ký tự của chúng.
[.__.] Tôi tìm thấy giải pháp này:

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

Nhưng đây không phải là một ý tưởng tốt vì tôi cũng phải chăm sóc phần còn lại của tiến trình đệ trình. Tôi chỉ cần thay thế một số nhân vật. Có bất kỳ móc để làm điều này? Các giải pháp là gì?

16
Pedram Behroozi

$form['#submit'] lưu trữ một mảng các trình xử lý biểu mẫu. Với mã bạn đã cung cấp, bạn ghi đè lên nó bằng cách chỉ thêm mã của riêng bạn. Để có kết quả bạn muốn, bạn nên thêm trình xử lý trình của mình làm phần tử đầu tiên trong mảng như thế này:

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

Có được các giá trị đúng trong các hình thức phù hợp và thay thế một số ký tự có lẽ là một vấn đề lớn hơn trong chính nó. Bạn có thể muốn thu hẹp các biểu mẫu/trường bạn cần thay đổi để đảm bảo bạn không phá vỡ bất cứ điều gì.

22
Madis

Có lẽ sẽ tốt hơn khi thực hiện các sửa đổi này trong khi xác thực thay vì gửi như được đề xuất bởi Drupal (xem hàm form_set_value tại https://api.drupal.org/api/drupal/ bao gồm! form.inc/feft/form_set_value/7 ).

Vì vậy, trong hook_form_alter của bạn, bạn thậm chí có thể thêm nó vào cuối các chức năng xác thực hiện có nếu bạn muốn:

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