devel_wizard-2.x-dev/templates/token/devel_wizard.token.hooks.php.twig
templates/token/devel_wizard.token.hooks.php.twig
<?php
declare(strict_types=1);
/**
* @file
* Token related hook implementations.
*/
use Drupal\Core\Render\BubbleableMetadata;
/**
* Implements hook_token_info().
*/
function {{ module }}_token_info() {
return [
'types' => [
'{{ module }}' => [
'name' => t('{{ module }}'),
'description' => t('Tokens defined by the custom web application.'),
],
],
'tokens' => [
'{{ module }}' => [
'foo' => [
'name' => t('Foo'),
'description' => t('Foo'),
'type' => 'string',
],
'sub_object' => [
'name' => t('Sub object'),
'description' => t('Sub object.'),
'type' => 'node',
],
],
],
];
}
/**
* Implements hook_tokens().
*/
function {{ module }}_tokens(
$type,
$tokens,
array $data,
array $options,
BubbleableMetadata $bubbleable_metadata,
) {
if ($type !== '{{ module }}') {
return [];
}
$tokenService = Drupal::token();
$replacements = [];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'foo':
$replacements[$original] = 'bar';
break;
case 'sub_object':
$node = \Drupal\node\Entity\Node::load(42);
if ($node) {
$replacements[$original] = $node->label();
$replacements += $tokenService->generate(
'node',
$tokenService->findWithPrefix($tokens, 'sub_object'),
[
'node' => $node,
],
$options,
$bubbleable_metadata,
);
}
break;
}
}
return $replacements;
}
