TYPO3 JobRouter Base 

Extension key

jobrouter_base

Package name

jobrouter/typo3-base

Version

main

Language

en

Author

Chris Müller, JobRouter GmbH

License

This document is published under the Creative Commons BY 4.0 license.

Rendered

Wed, 22 Apr 2026 06:33:09 +0000


Base library for the TYPO3 JobRouter® extensions


Table of Contents:

Introduction 

JobRouter® is a scalable digitalisation platform which links processes, data and documents. The TYPO3 extension JobRouter Base acts as a base library for the TYPO3 JobRouter extensions:

What does it do? 

TYPO3 JobRouter Base is a TYPO3 extension and provides

Release management 

This extension uses semantic versioning which basically means for you, that

  • Bugfix updates (for example, 1.0.0 => 1.0.1) just includes small bug fixes or security relevant stuff without breaking changes.
  • Minor updates (for example, 1.0.0 => 1.1.0) includes new features and smaller tasks without breaking changes.
  • Major updates (for example, 1.0.0 => 2.0.0) includes breaking changes which can be refactorings, features or bug fixes.

The changes between the different versions can be found in the changelog.

Installation 

Target group: Administrators

Requirements 

Version matrix 

JobRouter Base PHP TYPO3
5.0 8.2 - 8.5 13.4 / 14.3
4.0 8.1 - 8.4 12.4 / 13.4
3.0 8.1 - 8.3 11.5 / 12.4
2.0 8.1 - 8.3 11.5 / 12.4
1.4 7.4 - 8.2 10.4 / 11.5
1.3 7.4 - 8.1 10.4 / 11.5
1.1 / 1.2 7.3 - 8.1 10.4 / 11.5
1.0 7.2 - 7.4 10.4

Installation via Composer 

The recommended way to install this extension is by using Composer. In your Composer-based TYPO3 project root, just type:

composer req jobrouter/typo3-base
Copied!

and the recent version will be installed.

Installation in Extension Manager 

In a classic installation, you can also install the extension from the TYPO3 Extension Repository (TER).

Variable resolvers 

Target group: Integrators, Developers

Variables 

You can use variables in the common process parameters, such as summary or initiator, and in the process table fields.

Variables look like: {__variableName} or {__variableName.subKey} − in curly brackets with a double underscore at the beginning.

Example:

finishers:
   -
      identifier: JobRouterStartInstance
      options:
         handle: 'start_website_contact'
         summary: '{__LLL:EXT:your_ext/Resources/Private/Language/forms.xlf:demo.summary} ({__language.navigationTitle})'
         initiator: '{__correlationId}'
         processtable:
            name: '{preName} {lastName}'
            company: '{company}'
            email_address: '{email}'
            phone_number: '{phone}'
            message: '{message}'
            from_website: '{__language.base}'
Copied!

Correlation ID 

The correlation ID is generated from the form identifier and a unique key to identify associated transfers – as you can start multiple instances from one form and transmit data to a JobData table. The correlation ID is stored in a column in the transfer tables together with the form data. This is useful if you want to check the data from the instance against the original data from the form.

The correlation ID looks like this: form_demo-20_63fca23b1accb where form indicates the ID is generated by a from finisher, demo-20 is the form identifier with the content element uid of the form plugin and 63fca23b1accb is the unique key.

Use the {__correlationId} variable to add the correlation ID.

Localisation labels 

Values can be localised with the help of the localisation labels known from various parts in TYPO3. The variable starts with {__LLL: and holds the path to the translation file and the according key, for example, {__LLL:EXT:your_ext/Resources/Private/Language/locallang.xlf:your.label}.

If the label is not found and therefore cannot be translated the value is untouched.

You can use multiple localisation labels in one form value.

Language information 

The language information defined in the Site Configuration can be used, namely:

{__language.base}
The base URL for the language, for example, https://example.org/en/.
{__language.flagIdentifier}
The defined TYPO3 flag identifier used in TYPO3's backend, for example, flags-gb.
{__language.hreflang}
Language tag for the language defined by RFC 1766 / 3066 for lang hreflang attributes, for example, en-gb.
{__language.languageId}
The language ID defined in the site configuration.
{__language.locale}
The used locale, for example, en_GB.UTF-8.
{__language.locale.countryCode}
The ISO-3166-1 alpha-2 country code, for example US.
{__language.locale.languageCode}
The ISO-639-1 language ISO code, for example, en.
{__language.navigationTitle}
The navigation title defined in the site configuration, used as label within language menus, for example, English.
{__language.title}
The title defined in the site configuration, for example, English.
{__language.typo3Language}
default for English, otherwise one of TYPO3's internal language keys.

Multiple language variables can be used in one form value.

JobRouter language information 

Sometimes it is necessary to use not the language code of the page in your form but instead the language string JobRouter® uses (for example, german instead of de). This can be useful for sending localised emails from the process in the relevant language.

Use the {__jobRouterLanguage} variable for that. The following languages are supported by JobRouter® in recent version:

ISO 639-1 code JobRouter® language
ar arabic
cs czech
da danish
de german
en english
es spanish
fi finnish
fr french
hr croatian
hu hungarian
it italian
ja japanese
lt lithuanian
nl dutch
pl polish
pt portuguese
ro romanian
ru russian
sk slovak
sl slovenian
sr serbian
tr turkish
uk ukrainian
zh chinese

If the language is not available, an empty string is returned by the variable resolver.

Page properties 

The properties of the page where the form is located can be retrieved. The variable starts with __page.. Any existing page property, such as uid or title, can be used, for example: {__page.title}.

If a page property is not present, the variable is used unchanged.

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!

Changelog 

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased 

5.0.0 - 2026-04-22 

Added 

  • Compatibility with TYPO3 v14
  • Support Ukrainian in JobRouterLanguageResolver

Removed 

  • Compatibility with TYPO3 v12 (#1)

4.0.0 - 2024-10-01 

Added 

  • Compatibility with TYPO3 v13

Removed 

  • Compatibility with TYPO3 v11
  • Language variables {__language.twoLetterIsoCode} and {__language.direction}

3.0.0 - 2024-02-21 

Changed 

  • Namespace from Brotkrueml\JobRouterBase to JobRouter\Addon\Typo3Base

2.0.0 - 2023-05-31 

Added 

  • Processing of an attachment and date as field type
  • Compatibility with TYPO3 v12

Changed 

  • FieldTypeEnumeration is now an enum named FieldType

Removed 

  • Compatibility with TYPO3 v10
  • Compatibility with PHP 7.4 and 8.0

Added 

1.3.0 - 2022-07-19 

Added 

  • Support Lithuanian, Portuguese and Serbian in JobRouterLanguageResolver

Removed 

  • Compatibility with PHP 7.3

1.2.0 - 2022-01-18 

Added 

  • Common translations for dependent extensions
  • Support Croatian in JobRouterLanguageResolver

1.1.0 - 2021-11-21 

Added 

  • Compatibility with TYPO3 v11 LTS
  • Variable resolver for page properties

Removed 

  • Compatibility with PHP 7.2

1.0.0 - 2021-03-14 

Added 

  • Show number of days for available transfers in status widget

0.1.2 - 2021-03-07 

Changed 

  • Text and icon in transfer report widget when no errors occur

0.1.1 - 2021-03-06 

Added 

  • Dashboard widget for transfer report

Changed 

  • Raise minimum required version to TYPO3 10.4.11

0.1.0 - 2020-10-19 

Initial pre-release

Upgrade 

From version 3.0 to 4.0 

The following language variables have been removed:

  • {__language.twoLetterIsoCode}, use {__language.locale.languageCode} instead
  • {__language.direction} (without substitution)

From version 2.0 to 3.0 

The namespace of the JobRouter TYPO3 Base classes has changed from

\Brotkrueml\JobRouterBase
Copied!

to

\JobRouter\Addon\Typo3Base
Copied!

The easiest way to update your code to the new namespace is to use search/replace in your project.

The package name (used in composer.json) has changed from brotkrueml/jobrouter-typo3-base to jobrouter/typo3-base.