用户资料编辑表单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;,要恢复默认的必填状态,有两种方式:
- 最简单的:直接删掉这行代码,让Drupal使用表单的默认设置;
- 如果需要保留角色判断逻辑(只针对
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
相关产品推荐
相关产品推荐

