フォームAPIの続き3
検証関数内での値保存
検証関数内で値を保存する方法の一つとして、form_set_value関数が使用できる。
まずはフォームで入力ボックスを定義。
<?php /** * フォームを定義する */ function simpleform_nameform(){ // ~ここまで省略 // 検証関数で保存 $form['homestay'] = array( '#title' => t('とまる場所') , '#type' => 'textfield' , '#description' => t('泊まる場所を記す場所') ); // ~ここからも省略 } ?>
上の検証関数を定義する。
値がある時だけ、$form_stateに値を保存する。
<?php /** * フォームを検証する */ function simpleform_nameform_validate($form,&$form_state){ // #parentプロパティに配列を持たせる $form['homestay']['#parents'] = array('homestay'); // 値がある時だけ if(!is_null($form_state['values']['homestay'])) { // 変数に値を入れる $homestay_value = $form_state['values']['homestay']; }else { $homestay_value = 0; } // 値があるときだけ if($homestay_value){ // $form_stateに値を保存 // homestay配列の0番目Valueに値を入れる form_set_value( $form['homestay'] , array( 0 => array( 'value' => $homestay_value ) ) , $form_state); }else{ form_set_error('homestay', t('泊まる場所を書いてくれ')); } } ?>
Submitを定義する。
ここで$form_stateの値が使える。
form_set_valueで保存したデータは
$form_state['values'}配列に入っている。
<?php function simpleform_nameform_submit($form,&$form_state){ // ~ここまで省略 // $form_stateから値を取得 drupal_set_message(t('使ったカギは,%key', array('%key' => $form_state['values']['homestay'][0]['value']))); return; } ?>
これで泊まる場所テキストボックスに値を入れてSubmitすると
こうなる
参考はDrupalAPI
[URL]