not president's blog

脳直で書きます。自分が覚えたい事を書いているだけです。

フォーム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すると f:id:orenodrupal:20150302225937j:plain こうなる f:id:orenodrupal:20150302225945j:plain 参考はDrupalAPI
[URL]

Drupal API