hook_form_alter 根据用户的角色取消设置字段

Har*_*aan 5 php drupal

当我尝试hook_form_alter根据用户的角色使用隐藏字段时,我遇到了问题。我已经使用unset()并从$form数组中删除了该字段,但是在呈现表单时它仍然显示。

这是我的代码:

function mymodule_form_alter($form, $form_state, $form_id){
  global $user;
  if($form_id == 'my_content_type'){
    if(array_key_exists(5,$user->roles) && !array_key_exists(3,$user->roles)){
      if(empty($form_state['field']['args'][0]->title)){
        unset($form['field_body']);
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ley*_*nnx 3

您应该将该属性设置为,而不是使用unset()隐藏表单元素。这可以保持表单构建树完整,从而避免其他模块尝试访问或更改该信息时出现问题。来源#accessFALSE

function MYMODULE_form_alter($form, $form_state, $form_id) {

  global $user;
  $account = $user;

  if ($form_id == 'MYCONTENTTYPE_node_form') {

    if (user_has_role(5, $account) && !user_has_role(3, $account)) {

      if (empty($form_state['field']['args'][0]->title)) {

        $form['field_body']['#access'] = FALSE;
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果这仍然不起作用,请仔细检查您的 if 请求。他们真的在做某事吗?您当前是否以相应用户身份登录?