[Backport 2.1-develop] CMS Page - Force validate layout update xml in production mode when saving CMS Page - Handle layout update xml validation exceptions #11860
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When saving custom layout update xml in CMS page, in production mode, xml is not validated against schema file, due to
\Magento\Framework\App\Arguments\ValidationState::isValidationRequiredmethod:Actual result:


Desired behaviour would be check the layout update xml against the schema, and show error message to the user if it is invalid:

Also, when layout update is validated, validation exceptions are unhandled, showing a report error in production mode, and showing this error in developer mode:

For example, uncomment demo layout handle in home page:

Desired behaviour would be handle the exception properly instead of crash, and show error message to the user:

Description
\Magento\Cms\Controller\Adminhtml\Page\PostDataProcessor::validateshould always return a boolean value. It uses\Magento\Framework\View\Model\Layout\Update\Validator::isValidmethod, that may throw an exception if xml is not valid, so\Magento\Cms\Controller\Adminhtml\Page\PostDataProcessor::validatemust handle possible exceptions thrown by xml validator, in order to always return a boolean value.\Magento\Cms\Model\Page\DomValidationStatehas been added, and it is injected from post data processor to force layout update xml validation, only upon cms page save.This PR include changes of PR #11866
Manual testing scenarios
Enable developer mode
Edit or create a CMS page, enter some invalid xml in Layout Update XML textarea
Try to save the page, application crashes
Enable production mode
Edit or create a CMS page, enter some invalid xml in Layout Update XML textarea
Try to save the page, xml does not get validated
Contribution checklist