Some forms with Ajax sub-forms don't work with Config Enforce Devel installed

Created on 17 October 2022, over 1 year ago
Updated 9 February 2023, over 1 year ago

Problem/Motivation

With Config Enforce Devel installed, some forms with Ajax behaviours silently fail when interacted with. Upon checking the database log, fatal errors can be found. Reproducible examples include:

  • Entity field view display (e.g. admin/structure/types/manage/page/display for page nodes)
  • Entity field form display (e.g. admin/structure/types/manage/page/form-display for page nodes)
  • Paragraphs add/edit buttons on node edit forms (and likely on any entity edit form paragraphs are on)

Steps to reproduce

  1. Install using Standard profile
  2. Go to admin/structure/types/manage/page/display
  3. Try changing the Body format to something else, e.g. from "Default" to "Summary or trimmed".
  4. Notice that the spinner and Ajax request never finishes. Checking the browser console should show an Ajax error. Checking the site's database log, an error similar to this should be found:

Location https://generic-drupal-test.local/admin/structure/types/manage/page/display?_wrapper_format=drupal_ajax&ajax_form=1
Referrer https://generic-drupal-test.local/admin/structure/types/manage/page/display

Error: Unknown named parameter $form_id in call_user_func_array() (line 531 of E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\Form\FormBuilder.php)

#0 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\Form\FormBuilder.php(531): call_user_func_array(Array, Array)
#1 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\Form\FormBuilder.php(370): Drupal\Core\Form\FormBuilder->retrieveForm('entity_view_dis...', Object(Drupal\Core\Form\FormState))
#2 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\Form\FormBuilder.php(628): Drupal\Core\Form\FormBuilder->rebuildForm('entity_view_dis...', Object(Drupal\Core\Form\FormState), Array)
#3 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\Form\FormBuilder.php(320): Drupal\Core\Form\FormBuilder->processForm('entity_view_dis...', Array, Object(Drupal\Core\Form\FormState))
#4 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\Controller\FormController.php(73): Drupal\Core\Form\FormBuilder->buildForm(Object(Drupal\field_ui\Form\EntityViewDisplayEditForm), Object(Drupal\Core\Form\FormState))
#5 [internal function]: Drupal\Core\Controller\FormController->getContentResult(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\Core\Routing\RouteMatch))
#6 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber.php(123): call_user_func_array(Array, Array)
#7 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\Render\Renderer.php(564): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#8 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber.php(124): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure))
#9 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber.php(97): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array)
#10 E:\Web\Drupal\generic_test_site\vendor\symfony\http-kernel\HttpKernel.php(158): Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}()
#11 E:\Web\Drupal\generic_test_site\vendor\symfony\http-kernel\HttpKernel.php(80): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1)
#12 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\StackMiddleware\Session.php(58): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#13 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\StackMiddleware\KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#14 E:\Web\Drupal\generic_test_site\web\core\modules\page_cache\src\StackMiddleware\PageCache.php(106): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#15 E:\Web\Drupal\generic_test_site\web\core\modules\page_cache\src\StackMiddleware\PageCache.php(85): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#16 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\StackMiddleware\ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#17 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\StackMiddleware\NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#18 E:\Web\Drupal\generic_test_site\vendor\stack\builder\src\Stack\StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#19 E:\Web\Drupal\generic_test_site\web\core\lib\Drupal\Core\DrupalKernel.php(702): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#20 E:\Web\Drupal\generic_test_site\web\index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#21 {main}

Proposed resolution

Ideally, try to find why the $form_id parameter isn't being found, which ought to be the root cause of this. A short term bandaid can be to add the affected forms to the deny list so that they work correctly, but will make enforcing those configs a bit more tedious for users.

Relevant form IDs to add to deny list:

  • entity_form_display_edit_form
  • entity_view_display_edit_form
  • Node edit forms; this is trickier because there doesn't seem to be a single node_edit_form ID but an ID for each node type is generated, such as node_page_edit_form for nodes of type page from the Standard install profile for example.

Remaining tasks

See above.

User interface changes

Will remove the embedded enforce form for the above for the bandaid solution, until the root cause is fixed.

API changes

None?

Data model changes

None?

πŸ› Bug report
Status

Fixed

Version

1.0

Component

Code

Created by

πŸ‡¨πŸ‡¦Canada Ambient.Impact Toronto

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

Production build 0.69.0 2024