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 \JobRouter\AddOn\Typo3Base\Event\ResolveFinisherVariableEvent. It provides the following methods:

getFieldType(): \JobRouter\AddOn\Typo3Base\Enumeration\FieldType

getFieldType(): \JobRouter\AddOn\Typo3Base\Enumeration\FieldType

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

getValue(): string

Get the current value of the field. One or more variables can be defined inside.

setValue(string $value): void

setValue(string $value): void

Set the new value after resolving one or more variables.

getCorrelationId(): string

getCorrelationId(): string

Get the current correlation ID.

getFormValues(): array

getFormValues(): array

Get the form values, for example, ['company' => 'Acme Ltd.', 'name' => 'John Smith'].

getRequest(): \Psr\Http\Message\ServerRequestInterface

getRequest(): \Psr\Http\Message\ServerRequestInterface

Get the current request.

Example 

As an example we want to resolve a variable to a cookie value with an event listener:

<?php
declare(strict_types=1);

namespace YourVender\YourExtension\EventListener;

use JobRouter\AddOn\Typo3Base\Event\ResolveFinisherVariableEvent;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Core\Attribute\AsEventListener;

#[AsEventListener(
   identifier: 'your-extension/cookie-variable-resolver',
)]
final readonly class TheCookieVariableResolver
{
   private const COOKIE_NAME = 'the_cookie';
   private const VARIABLE = '{__theCookieValue}';

   public function __invoke(ResolveFinisherVariableEvent $event): void
   {
      $value = $event->getValue();

      if (str_contains($value, self::VARIABLE)) {
         // 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!