Developer corner
Target group: Developers
Table of Contents
Writing own variable resolvers
With variables it is possible to add information to a process start which is resolved when submitting a form. This extension ships some variable resolvers already, for example, for translation or language information.
You can write your own variable resolvers dependent on your needs. Variable resolvers are implemented as PSR-14 event listeners.
The event listener receives the event
\Job
. It
provides the following methods:
- getFieldType(): \JobRouter\AddOn\Typo3Base\Enumeration\FieldType
Changed in version 2.0.0
Get the field type, like Field
for text or
Field
for int. Have a look in the class
\Job
for the available field
types.
- getValue(): string
Get the current value of the field. One or more variables can be defined inside.
- setValue(string $value): void
Set the new value after resolving one or more variables.
- getCorrelationId(): string
Get the current correlation ID.
- getFormValues(): array
Get the form values, for example,
['company' => 'Acme Ltd.', 'name' => 'John Smith']
.
- getRequest(): \\Psr\\Http\\Message\\ServerRequestInterface
Get the current request.
Hint
Some variable resolvers are already shipped with the extension. Have a look
into the folder Classes/
for implementation
details.
Example
As an example we want to resolve a variable to a cookie value.
-
Create the event listener
<?php declare(strict_types=1); namespace YourVender\YourExtension\EventListener; use JobRouter\AddOn\Typo3Base\Event\ResolveFinisherVariableEvent; use Psr\Http\Message\ServerRequestInterface; final class TheCookieVariableResolver { private const COOKIE_NAME = 'the_cookie'; private const VARIABLE = '{__theCookieValue}'; public function __invoke(ResolveFinisherVariableEvent $event): void { $value = $event->getValue(); if (str_pos($value, self::VARIABLE) === false) { // Variable is not available, do nothing return; } $cookies = $event->getRequest()->getCookieParams(); $variableValue = $cookies[self::COOKIE_NAME] ?? ''; $value = str_replace(self::VARIABLE, $variableValue, $value); $event->setValue($value); } }
Copied!Important
Variables have to start with
{__
. Otherwise the variable resolver is not called for a value. -
Register your event listener in
Configuration/
Services. yaml services: YourVendor\YourExtension\EventListener\TheCookieVariableResolver: tags: - name: event.listener identifier: 'your-extension/cookie-variable-resolver' event: JobRouter\AddOn\Typo3Base\Event\ResolveFinisherVariableEvent
Copied!