2017-08-31 9 views
0

Drupalフォームからコードで価値を得ようとしています。フォームを提出するとき。私はデータの検証を行います。drupalフォームの要素がバリデーション機能にありません

** 
* Implements hook_form_FORM_ID_alter() for user_register_form(). 
*/ 
function username_generator_form_user_register_form_alter(&$form, &$form_state, $form_id) { 
    $form['account']['#type'] = 'fieldset'; 
    $form['account']['name']['#suffix'] = '</div>'; 
    } 

drupal_add_js('function random_area_wrapper(name) { jQuery("#random-area-wrapper").html(name).slideDown(); }', 'inline'); 


    $form['Personal Information']['profile_date']['#default_value'] = array(
    'day' => date('j'), 
    'month' => date('n'), 
    'year' => date('Y') 
); 
    $form['Personal Information']['profile_date']['#after_build'] = array('__set_year_range'); 

    if (!user_access('administer users')) { 
    $form['Personal Information']['profile_date']['#element_validate'] = array('age_validate'); 
    } 
} 

の最初は、その後、機能age_validateに、私は値をプリントアウトしようとしますが、 の$ form_stateで、profile_dateデータが存在していること、しかし、私は$でデータを見つけることができませんを見つけます素子。ここで

は関数である。

function age_validate($element, &$form_state) { 
    $rid = autoassignrole_get_active_path_rid(); 
    $rid = array_diff($rid, array(0)); 
    $rid = reset ($rid); 

    if (_role_access($rid, 'allow kids registration') || empty($rid)) { 

    print_r($element); 
    print_r($form_state); 

そして、これは$ form_stateのうちプリントの抽出物です。

[values] => Array 
     (
      [profile_date] => Array 
       (
        [day] => 31 
        [month] => 8 
        [year] => 2001 
       ) 
) 

[input] => Array 
     (

      [profile_date] => Array 
       (
        [day] => 31 
        [month] => 8 
        [year] => 2001 
       ) 

     ) 

あなたはprofile_dateの値を見ることができますが、入力と値であり、私は

print_r($element); 

しようとすると、結果がここに

Array 
(
    [#default_value] => Array 
     (
      [day] => 31 
      [month] => 8 
      [year] => 2017 
     ) 

    [#after_build] => Array 
     (
      [0] => __set_year_range 
     ) 

    [#element_validate] => Array 
     (
      [0] => age_validate 
     ) 

    [#tree] => 
    [#parents] => Array 
     (
      [0] => profile_date 
     ) 

    [#array_parents] => Array 
     (
      [0] => Personal Information 
      [1] => profile_date 
     ) 

    [#weight] => 0 
    [#processed] => 
    [#required] => 
    [#attributes] => Array 
     (
     ) 

    [#title_display] => before 
    [#id] => edit-profile-date--2 
    [#sorted] => 1 
      [#validated] => 1 
     ) 

    [#after_build_done] => 1 
) 
Array 
(
    [#default_value] => Array 
     (
      [day] => 31 
      [month] => 8 
      [year] => 2017 
     ) 

    [#after_build] => Array 
     (
      [0] => __set_year_range 
     ) 

    [#element_validate] => Array 
     (
      [0] => age_validate 
     ) 

    [#tree] => 
    [#parents] => Array 
     (
      [0] => profile_date 
     ) 

    [#array_parents] => Array 
     (
      [0] => Personal Information 
      [1] => profile_date 
     ) 

    [#weight] => 0 
    [#processed] => 
    [#required] => 
    [#attributes] => Array 
     (
     ) 

    [#title_display] => before 
    [#id] => edit-profile-date--2 
    [#sorted] => 1 

      [#validated] => 1 
     ) 

    [#after_build_done] => 1 
)  

私がどのように今までここに

です$ element内のprofile_dateを見ることはできませんが、$ form_stateで見ることができ、$要素データは複製されますデータの欠落を引き起こす可能性のある理由は何ですか?

答えて

0

あなたの問題を理解しているかどうかわかりません。しかし、私は誤解があると思う。 #element_validateプロパティ約フォームAPIリファレンス

が書き込まれる書き込み:

A validation function for an element takes $element, $form_state, and $form as parameters: 
https://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/7.x#element_validate 

だからage_validateの最初の引数がprofile_date自体です。 出力から、$element['#default_value']$form_state['value']['profile_date']が等しく、 であることがわかります。したがって、profile_date入力の値を変更せずにフォームを送信しました。

お知らせ:

function age_validate($element, &$form_state, $form) {...} 

$formの内側にあなたは私がprofile_dateが持っている見ることができます$の形でprofile_date要素

+0

を見ることができます:あなたはage_validate内部全体の形をしたい場合は、三番目の引数を追加することができます[#value] => [day] => 31 [month] => 8 [year] => 2001 )、これは正しい入力値です。しかし、$ element ['value'] ['year']、$ element ['value'] ['month']、$ element ['value'] ['day']を印刷しようとすると、空の値。どうすれば解決できますか? –

関連する問題