class Explode
Same name in other branches
- 8.9.x core/modules/migrate/src/Plugin/migrate/process/Explode.php \Drupal\migrate\Plugin\migrate\process\Explode
- 10 core/modules/migrate/src/Plugin/migrate/process/Explode.php \Drupal\migrate\Plugin\migrate\process\Explode
- 11.x core/modules/migrate/src/Plugin/migrate/process/Explode.php \Drupal\migrate\Plugin\migrate\process\Explode
Splits the source string into an array of strings, using a delimiter.
This plugin creates an array of strings by splitting the source parameter on boundaries formed by the delimiter.
Available configuration keys:
- source: The source string.
- limit: (optional)
- If limit is set and positive, the returned array will contain a maximum of limit elements with the last element containing the rest of string.
- If limit is set and negative, all components except the last -limit are returned.
- If the limit parameter is zero, then this is treated as 1.
- delimiter: The boundary string.
- strict: (optional) When this boolean is TRUE, the source should be strictly a string. If FALSE is passed, the source value is casted to a string before being split. Also, in this case, the values casting to empty strings are converted to empty arrays, instead of an array with a single empty string item ['']. Defaults to TRUE.
Example:
process:
bar:
plugin: explode
source: foo
delimiter: /
If foo is "node/1", then bar will be ['node', '1']. The PHP equivalent of this would be:
$bar = explode('/', $foo);
process:
bar:
plugin: explode
source: foo
limit: 1
delimiter: /
If foo is "node/1/edit", then bar will be ['node', '1/edit']. The PHP equivalent of this would be:
$bar = explode('/', $foo, 1);
If the 'strict' configuration is set to FALSE, the input value is casted to a string before being spilt:
process:
bar:
plugin: explode
source: foo
delimiter: /
strict: false
If foo is 123 (as integer), then bar will be ['123']. If foo is TRUE, then bar will be ['1']. The PHP equivalent of this would be:
$bar = explode('/', (string) 123);
$bar = explode('/', (string) TRUE);
If the 'strict' configuration is set to FALSE, the source value casting to an empty string are converted to an empty array. For example, with the last configuration, if foo is '', NULL or FALSE, then bar will be [].
Plugin annotation
@MigrateProcessPlugin(
id = "explode"
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements \Drupal\Component\Plugin\PluginInspectionInterface, \Drupal\Component\Plugin\DerivativeInspectionInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
- class \Drupal\migrate\ProcessPluginBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\migrate\Plugin\MigrateProcessInterface
- class \Drupal\migrate\Plugin\migrate\process\Explode extends \Drupal\migrate\ProcessPluginBase
- class \Drupal\migrate\ProcessPluginBase extends \Drupal\Core\Plugin\PluginBase implements \Drupal\migrate\Plugin\MigrateProcessInterface
- class \Drupal\Core\Plugin\PluginBase extends \Drupal\Component\Plugin\PluginBase uses \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Messenger\MessengerTrait
Expanded class hierarchy of Explode
See also
\Drupal\migrate\Plugin\MigrateProcessInterface
1 file declares its use of Explode
- ExplodeTest.php in core/
modules/ migrate/ tests/ src/ Unit/ process/ ExplodeTest.php
7 string references to 'Explode'
- d6_field_instance_label_description_translation.yml in core/
modules/ config_translation/ migrations/ d6_field_instance_label_description_translation.yml - core/modules/config_translation/migrations/d6_field_instance_label_description_translation.yml
- d6_url_alias.yml in core/
modules/ path/ migrations/ d6_url_alias.yml - core/modules/path/migrations/d6_url_alias.yml
- d7_color.yml in core/
modules/ color/ migrations/ d7_color.yml - core/modules/color/migrations/d7_color.yml
- d7_theme_settings.yml in core/
modules/ system/ migrations/ d7_theme_settings.yml - core/modules/system/migrations/d7_theme_settings.yml
- d7_url_alias.yml in core/
modules/ path/ migrations/ d7_url_alias.yml - core/modules/path/migrations/d7_url_alias.yml
File
-
core/
modules/ migrate/ src/ Plugin/ migrate/ process/ Explode.php, line 94
Namespace
Drupal\migrate\Plugin\migrate\processView source
class Explode extends ProcessPluginBase {
/**
* {@inheritdoc}
*/
public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
if (empty($this->configuration['delimiter'])) {
throw new MigrateException('delimiter is empty');
}
$strict = array_key_exists('strict', $this->configuration) ? $this->configuration['strict'] : TRUE;
if ($strict && !is_string($value)) {
throw new MigrateException(sprintf('%s is not a string', var_export($value, TRUE)));
}
elseif (!$strict) {
// Check if the incoming value can cast to a string.
$original = $value;
if (!is_string($original) && $original != ($value = @strval($value))) {
throw new MigrateException(sprintf('%s cannot be casted to a string', var_export($original, TRUE)));
}
// Empty strings should be exploded to empty arrays.
if ($value === '') {
return [];
}
}
$limit = $this->configuration['limit'] ?? PHP_INT_MAX;
return explode($this->configuration['delimiter'], $value, $limit);
}
/**
* {@inheritdoc}
*/
public function multiple() {
return TRUE;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
Explode::multiple | public | function | Indicates whether the returned value requires multiple handling. | Overrides ProcessPluginBase::multiple | |
Explode::transform | public | function | Performs the associated process. | Overrides ProcessPluginBase::transform | |
PluginInspectionInterface::getPluginDefinition | public | function | Gets the definition of the plugin implementation. | 6 | |
PluginInspectionInterface::getPluginId | public | function | Gets the plugin_id of the plugin instance. | 2 |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.