How to programmatically create and update a submission
New submission
This example creates a new submission for webform ID "my_webform" and validates the data.
use Drupal\webform\Entity\Webform;
use Drupal\webform\WebformSubmissionForm;
// Get submission values and data.
$values = [
'webform_id' => 'my_webform',
'entity_type' => NULL,
'entity_id' => NULL,
'in_draft' => FALSE,
'uid' => '1',
'langcode' => 'en',
'token' => 'pgmJREX2l4geg2RGFp0p78Qdfm1ksLxe6IlZ-mN9GZI',
'uri' => '/webform/my_webform/api',
'remote_addr' => '',
'data' => [
'checkboxes_field' => [
'Option 1',
'Option 2',
'Option 3',
],
'integer_field' => 10,
'radio_field' => 'Mail',
'email' => 'myemail@mydomain.com',
],
];
// Check webform is open.
$webform = Webform::load($values['webform_id']);
$is_open = WebformSubmissionForm::isOpen($webform);
if ($is_open === TRUE) {
// Validate submission.
$errors = WebformSubmissionForm::validateFormValues($values);
// Check there are no validation errors.
if (!empty($errors)) {
print_r($errors);
}
else {
// Submit values and get submission ID.
$webform_submission = WebformSubmissionForm::submitFormValues($values);
print $webform_submission->id();
}
}
Update submission
You also can create and update a submission using $webform_submission instead an array values with WebformSubmissionForm::submitWebformSubmission().
Example of submission creation:
use Drupal\webform\Entity\Webform;
use Drupal\webform\Entity\WebformSubmission;
use Drupal\webform\WebformSubmissionForm;
// Get submission values and data.
$values = [
'webform_id' => 'my_webform',
'entity_type' => NULL,
'entity_id' => NULL,
'in_draft' => FALSE,
'uid' => '1',
'langcode' => 'en',
'token' => 'pgmJREX2l4geg2RGFp0p78Qdfm1ksLxe6IlZ-mN9GZI',
'uri' => '/webform/my_webform/api',
'remote_addr' => '',
'data' => [
'checkboxes_field' => [
'Option 1',
'Option 2',
'Option 3',
],
'integer_field' => 10,
'radio_field' => 'Mail',
'email' => 'myemail@mydomain.com',
],
];
// Check webform is open.
$webform = Webform::load($values['webform_id']);
$is_open = WebformSubmissionForm::isOpen($webform);
if ($is_open === TRUE) {
// Create new submission instance
$webform_submission = WebformSubmission::create($values);
// Validate submission.
$errors = WebformSubmissionForm::validateWebformSubmission($webform_submission);
// Check there are no validation errors.
if (!empty($errors)) {
print_r($errors);
}
else {
// Submit values and get submission ID.
$webform_submission = WebformSubmissionForm::submitWebformSubmission($webform_submission);
print $webform_submission->id();
}
}
Example of submission update:
use Drupal\webform\Entity\Webform;
use Drupal\webform\Entity\WebformSubmission;
use Drupal\webform\WebformSubmissionForm;
// Example IDs
$webform_id = 'my_webform';
$webform_submission_id = 5;
// Check webform is open.
$webform = Webform::load($webform_id);
$is_open = WebformSubmissionForm::isOpen($webform);
if ($is_open === TRUE) {
// Load submission
$webform_submission = WebformSubmission::load($webform_submission_id);
// Modify submission values
$webform_submission->setElementData('integer_field', 7);
// Validate submission.
$errors = WebformSubmissionForm::validateWebformSubmission($webform_submission);
// Check there are no validation errors.
if (!empty($errors)) {
print_r($errors);
}
else {
// Submit values and get submission ID.
$webform_submission = WebformSubmissionForm::submitWebformSubmission($webform_submission);
print $webform_submission->id();
}
}
Create submission without form (or Directly as submission entity)
All the above examples assume that the data is coming from end-user that should be validated before insert. However, if you have a case where the data is already sanitized or entered programmatically or have to skip the form level validation like captcha, the submission could be done directly via submission entity instead of form. Here is an example of creating a submission:
use Drupal\webform\Entity\Webform;
use Drupal\webform\Entity\WebformSubmission;
// Example IDs
$webform_id = 'my_webform';
$webform = Webform::load($webform_id);
// Create webform submission.
$values = [
'webform_id' => $webform->id(),
'data' => [
'name' => 'John Smith',
'email' => 'John.Smith@example.com',
'subject' => 'Hi!',
'message' => 'Added via submission entity',
],
];
/** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
$webform_submission = WebformSubmission::create($values);
$webform_submission->save();
Help improve this page
You can:
- Log in, click Edit, and edit this page
- Log in, click Discuss, update the Page status value, and suggest an improvement
- Log in and create a Documentation issue with your suggestion