Skip to main content
3 of 3
removed "Drupal" from the title; removed tags from the title
avpaderno
  • 97.9k
  • 15
  • 164
  • 284

How do I programmatically disable a form?

I want disable the user register form depending some conditions. The user go to the "/user/register" page, and he must see 'Registration is disable because ...'.

From my "form_user_register_form_alter" hook, I don't find anywhere how can I disable all the form programmatically (I mean removing all fields form). I think I can unset all form elements, but I feel that is an ugly way.

Is there a method (from the FormStateInterface class) or a Drupal function (for the form variable) to properly disable the form?

This is my most recent tentative.

function mycustommodule_limit_form_user_register_form_alter(&$form, FormStateInterface $form_state){
  if (...) {
    $form['#access'] = FALSE; // Drupal 7 (ugly?) way
    drupal_set_message('This form is disable because...');
  }
}

When I go to the /user/register form, the form is disable ! but I get this error.

Notice: Undefined index: #markup in Drupal\Core\Render\RenderCache->getCacheableRenderArray() (line 323 of core/lib/Drupal/Core/Render/RenderCache.php).

screenshot

I would like to hide/remove Create new account too.

spacecodeur
  • 1.3k
  • 3
  • 32
  • 55