首页 > 解决方案 > 页面刷新时不会触发 hook_form_alter

问题描述

我已经制作了一个 Drupal7 模块,我正在尝试在 hook_form_alter 中加载值。保存后它可以工作,但是当我刷新页面时它会空白。为了向您展示问题,我在 hook_form_alter 中打印了时间并且它没有更新。有什么想法为什么在我刷新页面时它没有显示新的时间戳?

<?php

function bank_info_menu() {
  $items = array();
  $items['bank-info'] = [
      'title' => 'My Banking Info',
      'page callback' => 'drupal_get_form',
      'page arguments' => array('bank_info_form'),
      'access callback' => 'bank_info_check_role',
      'type' => MENU_NORMAL_ITEM,
  ];

  return $items;
}

function bank_info_form($form, &$form_state) {
  $form['bank_account_number'] = array(
    '#type' => 'textfield',
    '#title' => t('Bank Account Number'),
    '#default_value' => '',
    '#maxlength' => 20,
  );

  return $form;
}

function bank_info_form_submit($form, &$form_state) {
  global $user;
  $obj = entity_metadata_wrapper('user', $user);
  if(array_key_exists('bank_account_number', $form_state['values'])){
    $obj->bank_account_number = $form_state['values']['bank_account_number'];
  }
  $obj->save();
  drupal_set_message('Saved banking information successfully.');
}


function bank_info_form_alter(&$form, &$form_state, $form_id){
  if ($form['#id'] == 'bank-info-form') {
    echo date("h:i:sa");
  }
}

标签: drupal-7

解决方案


该代码有一个缺点。它在 'if' 子句中使用 $form['#id'] 。$form['#id'] 通常用于表单的 'id' 属性,在某些情况下可能会有所不同。改用 $form_id 变量。

if ($form_id == 'bank_info_form') {
  echo date("h:i:sa");
}

推荐阅读