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で見ることができ、$要素データは複製されますデータの欠落を引き起こす可能性のある理由は何ですか?
を見ることができます:あなたは
age_validate
内部全体の形をしたい場合は、三番目の引数を追加することができます[#value] => [day] => 31 [month] => 8 [year] => 2001 )、これは正しい入力値です。しかし、$ element ['value'] ['year']、$ element ['value'] ['month']、$ element ['value'] ['day']を印刷しようとすると、空の値。どうすれば解決できますか? –