---
title: Alles, was Sie über TypoScript-Bedingungen mit der Symfony Expression Language wissen müssen
url: "https://nitsantech.de/typoscript-conditions-with-symfony-expression-language"
description: "Wussten Sie, dass mit TYPO3 v9.5 LTS die Symfony-Ausdruckssprache in TypoScript-Bedingungen eingeführt wurde? Ja!!! TypoScript ist das freundliche Herz von TYPO3, das durch Erweiterungen der beliebtesten Symfony-Expression immer mächtiger wird."
image: "https://nitsantech.de/fileadmin/_processed_/1/2/csm_All-You-Need-To-Know-About-TypoScript-Conditions-With-Symfony-Expression-Language_3_69e43ee6f5.jpg"
author: Sanjay Chauhan - TYPO3 Technopreneur
date: 2019-07-09
modified: 2025-11-07
lastUpdated: 2026-02-25
keywords:
  - TYPO3
  - TYPOscript
  - Symfony
  - CMS
  - PHP
categories:
  - TYPO3 CMS
---

# Alles, was Sie über TypoScript-Bedingungen mit der Symfony Expression Language wissen müssen

TypoScript Bedingungen mit der Symfony Expression Language
==========================================================

 09 Juli 2019

 [![](https://nitsantech.de/fileadmin/ns_theme_nitsan/Team_Slider/Sven_Thelemann.png)](https://nitsantech.de/blog/autor/sven-thelemann)

 [Sven Thelemann](https://nitsantech.de/blog/autor/sven-thelemann)

 [ TYPO3 CMS ](https://nitsantech.de/categories/typo3-cms)

Wussten Sie, dass mit TYPO3 v9.5 LTS die Symfony-Ausdruckssprache in TypoScript-Bedingungen eingeführt wurde? Ja!!! TypoScript ist das freundliche Herz von TYPO3, das durch Erweiterungen der beliebtesten Symfony-Expression immer mächtiger wird.

 ![TypoScript Bedingungen mit der Symfony Expression Language](https://nitsantech.de/fileadmin/ns_theme_ns2019/blog/live/Symfony_Expression_Language/Everything_you_need_to_know_about_TypoScript_conditionals_with_the_Symfony_Expression_Language.jpg)

   Table of content

Wussten Sie, dass mit TYPO3 v9.5 LTS die Symfony-Ausdruckssprache in TypoScript-Bedingungen eingeführt wurde? Ja!!! TypoScript ist das freundliche Herz von [**TYPO3**](https://nitsantech.de/blog/typo3), das durch Erweiterungen der beliebtesten Symfony-Expression immer mächtiger wird.

Hier möchte ich zeigen, wie alte TypoScript-Bedingungen in die brandneue Symfony-Ausdruckssprache migriert werden.

Einen Moment der Aufmerksamkeit, bitte.

Da ich TYPO3 liebe, möchte ich TYPO3-Nutzer mit informativen Inhalten, Tutorials und Erfahrungen versorgen, indem ich regelmäßig TYPO3-Blogs schreibe, "um der Community etwas zurückzugeben".

Um unsere außergewöhnlichen OpenSource TYPO3 Projekte und das Netzwerk weiter zu unterstützen.

Menschen zum Spenden inspirieren :)

TYPO3 + Symfony arbeiten zusammen, cool, oder?

**Symfony ist ein Set von wiederverwendbaren PHP-Komponenten... und PHP ist ein Framework für Webprojekte~** [**https://symfony.com/**](https://symfony.com/)

Das ist das Schöne an Open Source Projekten und der Community! TYPO3 ist wieder einmal der Beweis, Es ist eine Art CMS, das gut funktioniert und mit anderen Open Source Projekten integriert werden kann. Der TYPO3-Kern arbeitet hart an der Verwendung von Symfony-Komponenten, um die Basis der TYPO3 CMS-Lösung weiter zu verbessern.

Ich denke, Sie haben schon einige der Begriffe wie YAML, Routing, Console, etc. gehört, die aus dem Symfony Framework stammen. Sie werden vielleicht überrascht sein, wie viele Symfony-Komponenten in [**TYPO3 CMS**](https://nitsantech.de/blog/typo3-perfect-cms-for-everyone) verwendet werden? Hier ist die Liste:

- [Console](https://symfony.com/packages/Console)
- [Expression Language](https://symfony.com/packages/ExpressionLanguage)
- [Finder](https://symfony.com/packages/Finder)
- [Polyfill Intl ICU](https://symfony.com/packages/Polyfill%20Intl%20ICU)
- [Polyfill Intl IDN](https://symfony.com/packages/Polyfill%20Intl%20IDN)
- [Polyfill Mbstring](https://symfony.com/packages/Polyfill%20Mbstring)
- [PropertyAccess](https://symfony.com/packages/PropertyAccess)
- [PropertyInfo](https://symfony.com/packages/PropertyInfo)
- [Routing](https://symfony.com/packages/Routing)
- [Yaml](https://symfony.com/packages/Yaml)

[TYPO3-Neulinge](https://nitsantech.de/blog/typo3) sind manchmal etwas ängstlich und finden es schwierig, mit TypoScript umzugehen. Aber wenn Sie einmal die Schönheit von TypoScript verstanden haben, dann werden Sie es definitiv lieben.

TypoScript ist keine Skriptsprache, sondern dient eher als eine Art API (Schnittstelle) zur Konfiguration des zugrunde liegenden PHP-Codes.

Hier ist also die Syntax, wie TypoScript-Bedingungen derzeit verwendet werden:

 ```typescript
// TypoScript Code
[condition 1] [condition 2]
// True, Write your code here
[end]
```

Mit Hilfe von TypoScript-Bedingungen haben Sie die Möglichkeit, Ihre [**TYPO3 Templates**](https://nitsantech.de/blog/typo3-templates), Layouts, Inhaltselemente, etc. zu steuern,

Die Expression Language bietet eine Engine, die Ausdrücke kompiliert und auswertet. Ein Ausdruck ist ein Einzeiler, der einen Wert zurückgibt. Meistens ist sein Wert vom Typ Boolean, entweder wahr oder falsch.

Wie sieht es innerhalb von Symfony aus?

 ```typescript
$symfonyExpressionLanguage>evaluate('1 < 2');
// return true

$symfonyExpressionLanguage>evaluate('not ("Search" matches "/Replace/")');
// return true

$symfonyExpressionLanguage>evaluate('11 in 1..10');
// return true

$symfonyExpressionLanguage>evaluate('calendar.getWeekday() == "Monday"'));
// return true on monday, otherwise wrong
```

Weitere ausführliche Beispiele und Dokumentationen können Sie

Die Symfony Expression Language ist ab TYPO3 v9.4 eingeführt worden.

Die alte Syntax gilt als absolut und wird ab v10 veraltet sein.

Es ist also sehr empfehlenswert, für Ihre neuen und [TYPO3-Update/Upgrade](https://nitsantech.de/blog/typo3-update-upgrade)-Projekte auf die Symfony-Ausdruckssprache zu migrieren, um sicherzustellen, dass in Zukunft alles gut funktioniert :)

### Variablen

Schon vor dem TYPO3 9 Release wurden [TypoScript-Bedingungen](https://docs.typo3.org/m/typo3/reference-typoscript/8.7/en-us/Conditions/Reference/) mit der Symfony Expression Language verwendet. Hier sind die Beispiele:

| applicationContext | Gibt die Informationen über die aktuelle Umgebung zurück, z. B. Produktion oder Entwicklung. |
|---|---|
| page | Liefert alle Eigenschaften der aktuellen Seite |
| {$theConstant} | Liefert den Zugriff auf die TypoScript-Konstante |
| frontend.user.isLoggedIn | Gibt true zurück, wenn der Frontend-Benutzer eingeloggt ist |
| typo3.version | Liefert die Versionsinformationen von [TYPO3](https://nitsantech.de/blog/typo3-programmierung) |

### Funktionen

Um alle bisherigen TypoScript-Bedingungen zu ersetzen, stellt TYPO3 neben den oben genannten Variablen auch Funktionen zur Verfügung.

| date() | Liefert das aktuelle Datum |
|---|---|
| like("string", "\*chat") | Gibt zurück, ob die Zeichenkette char in einer Zeichenkette gefunden wird. |
| getTSFE() | Liefert einen Zugriff auf den TypoScript Frontend Controller $GLOBALS\['TSFE'\]; |
| request.getQueryParams() | Gibt alle GET-Parameter zurück. |
| site() | Gibt die Eigenschaften aus dem Modul Standortverwaltung zurück. |

In diesen Release Notes finden Sie die Implementierung der Symfony-Ausdruckssprache für TypoScript-Bedingungen.

### Ausdrücke

Vergleichen wir nun zwischen den bisherigen TypoScript-Bedingungen und der Symfony Expression Language.

 ```none
// Until TYPO3 v9
[globalVar = GP:L = 1]

// as of TYPO3 9.4 - the L-parameter is omitted, therefore verification of the site configuration

[siteLanguage("languageId") == "1"]

// Next to the Id, you can also query other properties

[siteLanguage("title") == "English"]
```

 ```none
// Until TYPO3 v9.3

[globalVar = GP:tx_myext_myplugin|bla > 0]

// from TYPO3 v9.4 (GET parameter or POST parameter)

[(request.getQueryParams()['tx_myext_myplugin'])['bla'] > 0 ||

(request.getParsedBody()['tx_myext_myplugin'])['bla'] > 0]
```

 ```none
// Until TYPO3 v9.3
[treeLevel = 0,2]

// From TYPO3 v9.4
[tree.level in [0,2]]
```

 ```none
// Until TYPO3 v9.3

[PIDinRootline = 5,10]

// From TYPO3 v9.4

[5 in tree.rootLineIds || 10 in tree.rootLineIds]
```

 ```none
// Until TYPO3 v9.3
[page|backend_layout = 1]

// From TYPO3 v9.4

[page["backend_layout"] == '1']
```

 ```none
// Until TYPO3 v9.3
[globalString = IENV:HTTP_HOST = *.mydomain.com]

// From TYPO3 v9.4

[like(request.getNormalizedParams().getHttpHost(), '*.mydomain.com')]
```

 ```none
// Until TYPO3 v9.3
[globalVar = LIT:1 = {$meineTypoScriptKonstante}]

// From TYPO3 v9.4

[{$meineTypoScriptKonstante} == '1']
```

 ```none
// Until TYPO3 v9.3
[globalVar = TSFE:beUserLogin > 0]

// From TYPO3 v9.4
[getTSFE().beUserLogin]
```

 ```none
// Until TYPO3 v9.3
[dayofweek = 5]

// From TYPO3 v9.4
[date("w") == 5]
```

Wissen Sie was, die Möglichkeiten der Bedingungen sind kaum begrenzt. Lesen Sie die "**Referenzen**", die zusätzliche Links am Ende dieses Blogbeitrags enthalten.

Um eigene Benutzerfunktionen aufzurufen, rufen wir sie bisher über \[userFun\] auf.

 ```none
[userFunc = \Vendor\Extension\UserFunc\MyUserFunc('foo')]
```

Die ExpressionLanguage kann auch durch die Registrierung [von Nachrichtenmethoden erweitert](https://symfony.com/doc/current/components/expression_language.html#expression-language-extending) werden.

**Schritt 1:** Erstellen Sie Configuration/ExpressionLanguage.php in Ihrer Erweiterung.
**Schritt 2:** Registrieren Sie Ihren Provider, indem Sie ein Array mit Ihrer benutzerdefinierten ExpressionLanguage.php zurückgeben.

 ```php
<?php
return [
    'tx_myext_provider' => [
        \Vendor\Extension\ExpressionLanguage\MyConditionProvider::class,
    ]
];
```

**Schritt 3:** Erstellen Sie Ihre benutzerdefinierte Klasse, um Ihren Code zu schreiben

Schauen Sie sich den TypoScript-Bedingungsanbieter ExpressionLanguage aus dem TYPO3-Kern wie folgt genauer an:

 ```php
class TypoScriptConditionProvider extends AbstractProvider
	{
	    public function __construct()
	    {
	        $typo3 = new \stdClass();
	        $typo3->version = TYPO3_version;
	        $typo3->branch = TYPO3_branch;
	        $typo3->devIpMask = trim($GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']);
	        $this->expressionLanguageVariables = [
	            'request' => GeneralUtility::makeInstance(RequestWrapper::class, $GLOBALS['TYPO3_REQUEST'] ?? null),
             'applicationContext' => (string)GeneralUtility::getApplicationContext(),
            'typo3' => $typo3,
        ];
        $this->expressionLanguageProviders = [
            Typo3ConditionFunctionsProvider::class
        ];
    }
}
```

- [https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Index.html](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Index.html)
- [https://docs.typo3.org/typo3cms/extensions/core/Changelog/9.4/Feature-85829-ImplementSymfonyExpressionLanguageForTypoScriptConditions.html](https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/9.4/Feature-85829-ImplementSymfonyExpressionLanguageForTypoScriptConditions.html)
- [https://symfony.com/doc/current/components/expression\_language/syntax.html](https://symfony.com/doc/current/reference/formats/expression_language.html)
- [https://usetypo3.com/symfony-expression-language-in-typo3.html](https://usetypo3.com/symfony-expression-language-in-typo3/)
- <https://www.clickstorm.de/blog/typoscript-conditions-symfony-expression-language/>

- Halten Sie sich an die bewährte Praxis, brandneue TypoScript-Bedingungen mit der Symfony Expression Language zu verwenden, da die alten ab TYPO3 v10 veraltet sein werden.
- Denken Sie daran, alte TypoScript-Bedingungen auf neue zu migrieren, wenn Sie Ihre Projekte aktualisieren.
- Lesen Sie die Dokumentation weiter, um über alle neuen TypoScript-Bedingungen informiert zu sein.
- Spüren Sie weiterhin die Kraft und Schönheit von OpenSource-Projekten und Community = TYPO3 + Symfony.

Vielen Dank fürs Lesen! Fühlen Sie sich frei, jede Anregung oder Feedback an unten Kommentarfeld zu schreiben. Wenn Sie Hilfe oder TYPO3-bezogene Unterstützung benötigen, steht Ihnen unsere [**TYPO3 Agentur**](https://nitsantech.de/typo3-agentur) gerne zur Verfügung.

**Menschen zur Zusammenarbeit inspirieren! (TYPO3 + Symfony).**

#### Ansprechpartner für Internetagentur und TYPO3 Projekte

#### Sven Thelemann

Servicepartner - Deutschland

 [ st@nitsantech.de ](mailto:st@nitsantech.de) [ +49 351 48196661 ](tel:4935148196661)

 ![Sven Thelemann](/fileadmin/ns_theme_nitsan/CTA/SVEN__1_.png "Sven Thelemann")

![](https://nitsantech.de/fileadmin/ns_theme_nitsan/Team_Slider/Sven_Thelemann.png)

### Sven Thelemann

Client Service Lead

- [](https://www.linkedin.com/in/sven-thelemann-0a30867b/ "linkedin")

Sven Thelemann ist Client Service Lead bei NITSAN und konzentriert sich auf die Bereitstellung von TYPO3 Lösungen, die den Kundenzielen entsprechen. Mit seinem ausgeprägten Verständnis für Technologie und Kundenerwartungen sorgt er für eine reibungslose Kommunikation und Projektabwicklung. Außerhalb der Arbeit fährt Sven Thelemann gerne Fahrrad und experimentiert mit selbstgemachten Rezepten.

 Kommentare und Antworten
------------------------

 Danke für deinen Kommentar. Ihr Kommentar wurde erfolgreich hinzugefügt.

Danke für deinen Kommentar. Dein Kommentar wird nach der Überprüfung sichtbar.

Oops! Something went wrong, please try again later.

##### **Sei der erste der kommentiert**

  ### Verwandte Blogs

 [ ![](https://nitsantech.de/data:,)

#### TYPO3 CMS für Öffentlichen Sektor Websites: Bewährte Verfahren

 ](https://nitsantech.de/blog/typo3-oeffentlicher-sektor-deutschland-2026)

 [ ![](https://nitsantech.de/data:,)

#### TYPO3 SEO: Verbessern Sie das Ranking Ihrer TYPO3-Website

 ](https://nitsantech.de/blog/typo3-seo)