You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用户资料编辑表单form_id查询及表单修改失效问题求助

问题1:用户资料编辑表单所使用的form_id是什么?

用户资料编辑表单的form_id是user_form,你代码里写的MYMODULE_form_user_form_form_alter完全符合Drupal钩子命名规则(hook_form_FORM_ID_alter),这点是没问题的。

问题2:修改user-form不生效&恢复注册表单密码的REQUIRED状态

咱们拆分来解决:

为什么修改user-form不生效?

大概率是这几个常见原因:

  • 缓存没清:Drupal对钩子函数的修改很依赖缓存,你可以用Drush命令drush cr清除所有缓存,或者后台进入「配置」→「性能」页面手动清缓存,这是最容易忽略的点。
  • 代码语法错误:你写的kint('hello')...是不完整的代码,省略号会导致PHP语法错误,直接让钩子函数执行失败。要调试的话改成完整的kint('hello');,或者直接去掉这行调试代码。
  • 角色/权限限制:如果你的user_form钩子里也加了类似注册表单的角色判断逻辑,要确认当前登录的用户角色是否符合触发条件,不然修改根本不会触发。

如何恢复注册表单密码的REQUIRED状态?

你之前在注册表单钩子里写了$form['account']['pass']['#required'] = FALSE;,要恢复默认的必填状态,有两种方式:

  1. 最简单的:直接删掉这行代码,让Drupal使用表单的默认设置;
  2. 如果需要保留角色判断逻辑(只针对ROLETOCATCH角色取消必填,其他角色恢复默认),调整代码即可:
//USER REGISTER FORM
function MYMODULE_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $userID = \Drupal::currentUser();
  $userRole = $userID->getRoles();
  if($userRole[1] == 'ROLETOCATCH'){
    $form['account']['pass']['#required'] = FALSE; // 仅目标角色取消必填
    $form['account']['mail']['#required'] = TRUE;
    $form['account']['roles']['campaign_manager']['#default_value'] = TRUE;
    $form['account']['notify']['#default_value'] = TRUE;
  }
  // 非目标角色不修改pass的required状态,自动恢复默认必填
}

内容的提问来源于stack exchange,提问作者Bernard Brillo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:22:36