2010-08-13 29 views
7

Đối với một số yêu cầu, tôi cần chuyển thông tin bổ sung để gửi biểu mẫu trình xử lý. Ở dạng api, trong khi xác định tùy chỉnh trình xử lý nhưTrình xử lý gửi biểu mẫu với các đối số bổ sung

$additional_args = array(); 
$form['#submit'][] = 'my_submit_handler' 

tôi mong đợi để nộp xử lý như

function my_submit_handler($form, &$form_state, $additional_args){ 

Trả lời

14

Việc xử lý nộp được gọi bởi fapi drupal, vì vậy bạn không thể làm một cái gì đó như thế. Thay vào đó những gì bạn có thể làm, là thêm những gì bạn cần, hoặc vào số $form hoặc đến $form_state. Cách tiếp cận thông thường là:

  • Đã thêm trường vào biểu mẫu, nhập giá trị để lưu giá trị. Đừng làm điều này nếu bạn có giá trị trong định nghĩa biểu mẫu.

    $form['store'] = array(
        '#type' => 'value', 
        '#value' => $value 
    ); 
    

    này sẽ có mặt tại $form_state['values']['store'].

  • Thêm giá trị để $form_state['storage'], được thực hiện nếu bạn biến trong xác nhận của bạn xử lý mà bạn muốn chuyển sang xử lý nộp của bạn:

    // Validation. 
    $form_state['storage']['value'] = $value; 
    
    ... 
    
    // Submit 
    $value = $form_state['storage']['value']; 
    // Need to unset stored values when not used anymore. 
    unset($form_state['storage']['value']); 
    
+0

Lưu ý rằng với Drupal 6, bạn cũng có thể lưu trữ các biến tùy ý trong biểu mẫu $ ['# foo'], miễn là '#foo' không xung đột với bất kỳ thuộc tính nội bộ nào khác của API biểu mẫu. –

4

Theo báo cáo trong $form['#submit'] and $form['#validate'] and $form['#process'] no longer support custom parameters, cách gợi ý để vượt qua các tham số để trình xử lý gửi như trong mã được hiển thị là sử dụng mã tương tự như sau:

$form['#first_paramater'] = $value; 
$form['#submit'][] = 'my_submit_handler'; 

Trình xử lý sẽ truy xuất có giá trị là $form['#first_paramater']. Để nhận thấy rằng, thay vì #first_paramater, mã có thể sử dụng một chuỗi khác, nhưng phải bắt đầu bằng #.

Thông thường, không cần thiết lập trình xử lý gửi như mã, nhưng có một số trường hợp cần thiết, như thay đổi biểu mẫu được tạo bởi mô-đun khác hoặc đặt trình xử lý gửi khác cho từng trình các nút có trong biểu mẫu.

drupal_retrieve_form() tiết kiệm các thông số truyền cho các hình thức xây dựng xử lý trong $form['#parameters'] chứa:

  • $form_id
  • $form_state
  • thông số truyền cho người xây dựng hình thức
9

Drupal 7: đối số tuỳ chỉnh được tự động lan truyền troug $ form_state ['build_info'] ['args'] này được nói trong http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_get_form/7

Ex:

hook_form($form, &$form_state, $myAdditionnalArg) {...} 

Sau đó, trong

hook_form_submit($form, &$form_state) { 

... //$form_state['build_info']['args'] là một mảng chứa tại index 0 giá trị của các đối số $myAdditionnalArg ...

Các vấn đề liên quan