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

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, for example, ['company' => 'Acme Ltd.', 'name' => 'John Smith'].

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

Get the current request.

Example

As an example we want to resolve a variable to a cookie value.

  1. 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!
  2. 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!