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, e.g. 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
JobRouter\AddOn\Typo3Base\Event\ResolveFinisherVariableEvent
. It
provides the following methods:
- getFieldType(): \JobRouter\AddOn\Typo3Base\Enumeration\FieldType
Changed in version 2.0.0
Get the field type, like FieldType::Text
for text or
FieldType::Integer
for int. Have a look in the class
JobRouter\AddOn\Typo3Base\Enumeration\FieldType
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, e.g. ['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/Domain/VariableResolver
for implementation
details.
Example¶
As an example we want to resolve a variable to a cookie value.
Create the event listener
Copied!<?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); } }
Important
Variables have to start with
{__
. Otherwise the variable resolver is not called for a value.Register your event listener in
Configuration/Services.yaml
Copied!services: YourVendor\YourExtension\EventListener\TheCookieVariableResolver: tags: - name: event.listener identifier: 'your-extension/cookie-variable-resolver' event: JobRouter\AddOn\Typo3Base\Event\ResolveFinisherVariableEvent