protected function WebformEntityElementsValidator::validateRendering in Webform 8.5
Same name and namespace in other branches
- 6.x src/WebformEntityElementsValidator.php \Drupal\webform\WebformEntityElementsValidator::validateRendering()
Validate that elements are a valid render array.
Return value
\Drupal\Core\StringTranslation\TranslatableMarkup|string|null If not valid an error message.
See also
\Drupal\Core\Entity\EntityFormBuilder
\Drupal\webform\Entity\Webform::getSubmissionForm()
1 call to WebformEntityElementsValidator::validateRendering()
- WebformEntityElementsValidator::validate in src/
WebformEntityElementsValidator.php - Validate webform elements.
File
- src/
WebformEntityElementsValidator.php, line 555
Class
- WebformEntityElementsValidator
- Webform elements validator.
Namespace
Drupal\webformCode
protected function validateRendering() {
// Override Drupal's error and exception handler so that we can capture
// all rendering exceptions and display the captured error/exception
// message to the user.
// @see _webform_entity_element_validate_rendering_error_handler()
// @see _webform_entity_element_validate_rendering_exception_handler()
set_error_handler('_webform_entity_element_validate_rendering_error_handler');
set_exception_handler('_webform_entity_element_validate_rendering_exception_handler');
try {
/** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
$webform_submission = $this->entityTypeManager
->getStorage('webform_submission')
->create([
'webform' => $this->webform,
]);
$form_object = $this->entityTypeManager
->getFormObject('webform_submission', 'add');
$form_object
->setEntity($webform_submission);
$form_state = (new FormState())
->setFormState([]);
$this->formBuilder
->buildForm($form_object, $form_state);
$message = NULL;
} catch (\Throwable $error) {
$message = $error
->getMessage();
} catch (\Exception $exception) {
$message = $exception
->getMessage();
}
// Restore Drupal's error and exception handler.
restore_error_handler();
restore_exception_handler();
if ($message) {
$build = [
'title' => [
'#markup' => $this
->t('Unable to render elements, please view the below message(s) and the error log.'),
],
'items' => [
'#theme' => 'item_list',
'#items' => [
$message,
],
],
];
return $this->renderer
->renderPlain($build);
}
return $message;
}