Problem/Motivation
In #2767857: Add destination to edit, delete, enable, disable links in entity list builders we added destination
query parameters to config entity lists and operations in Views. This unearthed the fact that some of our forms are not destination query compatible - we broke the image style user interface unexpectedly. See #2940165: [regression] Cannot add effects to image style via the UI.
The problem is that the destination param is set to win regardless of what a user does in the form. This means that any Drupal form can be redirected to somewhere using it.
As discussed in #2950759: Revert 2767857, right now, it is necessary to alter the global request object to disable a destination query arg based redirect override. That's complicated to understand and we shouldn't be doing something like that.
Older related issues are:
#579366: How many ways are there to redirect after form submission?
#1627654: drupal_redirect_form() should state that it is overridden by a destination in the request
#2325463: Destination URL breaks preview
Proposed resolution
We need a way to set a higher priority redirect on a form. So the developer can say actually regardless of the destination parameter go here because obeying the redirect makes no sense. The fix however shouldn't be tied to the forms system so the patch at the moment adds a new IgnoreDestinationRedirectReponse
and the RedirectResponseSubscriber
checks and doesn't apply the ?destination
override if it is.
However since 90% of the redirects we are interested are from Forms the patch also adds helpers to FormState
to make redirects behave like this.FormStateInterface::getIgnoreDestination()
FormStateInterface::ignoreDestination($status)
Remaining tasks
Add more tests. One is currently provided by core/modules/image/src/Tests/ImageAdminStylesTest.php
which proves this fixes #2940165: [regression] Cannot add effects to image style via the UI whilst bringing back the nice consistent UI behaviour of #2767857: Add destination to edit, delete, enable, disable links in entity list builders for Image Styles.