7

一部の要件については、送信ハンドラーを形成するために追加情報を渡す必要があります。フォームAPIで、カスタム送信ハンドラーを次のように定義します

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

ハンドラーを次のように送信する予定です

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

3 に答える 3

14

送信ハンドラーはdrupalfapiによって呼び出されるため、そのようなことはできません。代わりに、あなたができることは、あなたが必要とするものを$form、またはのいずれかに追加することです$form_state。通常のアプローチは次のとおりです。

  • フォームにフィールドを追加し、値を入力して値を保存します。フォーム定義に値がある場合は、これを行わないでください。

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

    これはで利用可能になります$form_state['values']['store']

  • $form_state['storage']検証ハンドルの変数を送信ハンドラーに転送する場合は、に値を追加します。

    // 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']);
    
于 2010-08-13T07:45:10.077 に答える
9

Drupal 7:カスタム引数は自動的に伝播されます$ form_state ['build_info']['args']これはhttp://api.drupal.org/api/drupal/includes!form.inc/function/drupal_get_form/7で述べられています

元:

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

その後、

hook_form_submit($form, &$form_state) {

... //$form_state['build_info']['args']は、インデックス0に引数の値を含む配列$myAdditionnalArg です...

于 2012-10-04T14:34:46.007 に答える
4

$form['#submit']と$form['#validate']と$form['#process']で報告されているように、カスタムパラメータはサポートされなくなりました。次に示すように、送信ハンドラセットにパラメータを渡すための推奨される方法です。コードは、次のようなコードを使用することです。

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

ハンドラーは値をとして取得します$form['#first_paramater']。の代わりに#first_paramater、コードは別の文字列を使用できますが、で始まる必要があることに注意してください#

通常、コードのように送信ハンドラーを設定する必要はありませんが、別のモジュールで作成されたフォームを変更したり、に存在する送信ボタンごとに異なる送信ハンドラーを設定したりする必要がある場合があります。形。

drupal_retrieve_form()は、フォームビルドハンドラーに渡されたパラメーターを保存します$form['#parameters']

  • $form_id
  • $form_state
  • フォームビルダーに渡されるパラメーター
于 2010-08-14T12:18:43.913 に答える