{"id":3420,"date":"2018-12-20T15:28:27","date_gmt":"2018-12-20T14:28:27","guid":{"rendered":"https:\/\/www.clickstorm.de\/blog\/?p=3420"},"modified":"2025-11-13T11:21:29","modified_gmt":"2025-11-13T10:21:29","slug":"typoscript-conditions-symfony-expression-language","status":"publish","type":"post","link":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/","title":{"rendered":"TypoScript Conditions mit der Symfony Expression Language"},"content":{"rendered":"<p>F\u00fcr die TYPO3 v9.5 LTS wurde die Symfony Expression Language bei den TypoScript Conditions eingef\u00fchrt. Wem das zu viele Fragezeichen auf einmal sind, dem erkl\u00e4ren wir zun\u00e4chst, um was es sich bei TypoScript Conditions und der Symfony Expression Language handelt. Anschlie\u00dfend zeigen wir wie \u00e4ltere Conditions migriert und somit zukunftsf\u00e4hig gemacht werden.<\/p>\n<h2>TypoScript Conditions<\/h2>\n<p>TypoScript Conditions kommen wie der Name bereits verr\u00e4t beim TypoScript zum Einsatz. TypoScript ist keine Skriptsprache. TypoScript dient eher als eine Art API (Schnittstelle), zum konfigurieren des zugrunde liegenden PHP-Codes.<\/p>\n<p>Die TypoScript Conditions (zu Deutsch &#8222;Bedingungen&#8220;) bieten die M\u00f6glichkeit zu \u00fcberpr\u00fcfen, ob eine Bedingung erf\u00fcllt ist oder nicht. Je nachdem wird weiteres TypoScript verwendet oder nicht.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">... TypoScript ...\r\n\r\n[\u00a0Condition\u00a01\u00a0][\u00a0Condition\u00a02\u00a0]\r\n\r\n...\u00a0TypoScript, dass nur verarbeitet wird, wenn die Bedingungen erf\u00fcllt wurden\u00a0...\r\n\r\n[END]\r\n\r\n... TypoScript ...<\/pre>\n<p>Mit den Conditions kann beispielsweise Folgendes gefragt werden:<\/p>\n<ul>\n<li>Ist der aktuelle Nutzer im Backend eingeloggt?<\/li>\n<li>Ist heute Freitag?<\/li>\n<li>Enth\u00e4lt die URL den Parameter &#8222;x=1&#8220;?<\/li>\n<li>Findet im Gewandhaus zu Leipzig heute eine Veranstaltung statt?<\/li>\n<li>F\u00fchle ich mich gut?<\/li>\n<\/ul>\n<p>Zugegeben sind einige von diesen Fragen nicht f\u00fcr jede Webseite relevant. Es soll lediglich gezeigt werden, dass die M\u00f6glichkeiten der TypoScript Conditions kaum Grenzen kennen. Mit der Einf\u00fchrung der Symfony Expression Language werden sie sogar noch m\u00e4chtiger.<\/p>\n<h2>Symfony Expression Language<\/h2>\n<p>Symfony ist ein weit verbreitetes PHP-Framework. Es gibt PHP-Entwicklern n\u00fctzliche Werkzeuge an die Hand. So zum Beispiel auch die Expression Language.<\/p>\n<p>Die Expression Language stellt eine Engine bereit, mit der Ausdr\u00fccke kompiliert und ausgewertet werden k\u00f6nnen. Ein Ausdruck ist ein Einzeiler, der einen Wert zur\u00fcckgibt. Meistens ist dieser Wert vom Typ Boolean, also entweder Wahr oder Falsch.<\/p>\n<p>Innerhalb von Symfony sieht das dann wie folgt aus.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">$expressionLanguage-&gt;evaluate('1 &lt; 2');\u00a0\/\/\u00a0wahr<\/pre>\n<p>Die Expression Language stellt in diesem Fall &#8218;1 &lt; 2&#8216; dar. Hierbei handelt es sich um ein simples Beispiel.<\/p>\n<p>Die Expression Language Syntax\u00a0ist viel umfangreicher. M\u00f6glich sind somit auch:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">$expressionLanguage-&gt;evaluate('not\u00a0(\"Schuppenkopfr\u00f6tel\"\u00a0matches\u00a0\"\/Paddyreiher\/\")');\u00a0\/\/\u00a0wahr\r\n\r\n$expressionLanguage-&gt;evaluate('11 in 1..10'); \/\/\u00a0falsch\r\n\r\n$expressionLanguage-&gt;evaluate('calendar.getWeekday() == \"Freitag\"')); \/\/ Am Freitag wahr, sonst falsch<\/pre>\n<p>Der Ausdruck <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">matches<\/code> erm\u00f6glicht den Vergleich mit s\u00e4mtlichen regul\u00e4ren Ausdr\u00fccken.\u00a0Zudem k\u00f6nnen Eigenschaften und Funktionen von Objekten ausgef\u00fchrt werden.<\/p>\n<p>Zu beachten ist, dass ein Schr\u00e4gstrich (\\) innerhalb einer Zeichenkette mit 4 weiteren maskiert werden muss (\\\\\\\\) und sogar mit 8 (\\\\\\\\\\\\\\\\) in einem regul\u00e4ren Ausdruck.\u00a0 Dar\u00fcber hinaus werden Kontrollsequenzen, wie z.B. ein Zeilenumbruch (\\n), normalerweise mit einem Leerzeichen ersetzt. Durch voranstellen eines Weiteren umgekehrten Schr\u00e4gstrichs wird dies vermieden (\\\\n).<\/p>\n<p>Die hier aufgef\u00fchrten Beispiele sind nur ein kleiner Auszug. Einen umfangreichen \u00dcberblick gibt es in der <a href=\"https:\/\/symfony.com\/doc\/current\/components\/expression_language\/syntax.html\" target=\"_blank\" rel=\"noopener noreferrer\">Dokumentation<\/a>.<\/p>\n<h2>TypoScript Conditions in TYPO3 v9.5 LTS<\/h2>\n<p>Die Symfony Expression Language wurde mit der TYPO3 v9.4 in den Core \u00fcbernommen und steht somit auch in der Long Term Version 9.5 zur Verf\u00fcgung. Die alte Syntax gilt als veraltet und wird nur noch bis zur 10er Version unterst\u00fctzt. Um sein System zukunftsf\u00e4hig zu halten, gilt es die alten Conditions zu migrieren.<\/p>\n<h3>Variablen<\/h3>\n<p>Schon vor der TYPO3 9 kamen Conditions zum Einsatz. Hier standen dem Integrator eine Vielzahl von <a href=\"https:\/\/docs.typo3.org\/typo3cms\/TyposcriptReference\/8.7\/Conditions\/Reference\/\" target=\"_blank\" rel=\"noopener noreferrer\">Variablen<\/a>\u00a0zur Verf\u00fcgung, wie z.B. die ID der aktuellen Seite oder der Name des angemeldeten Benutzers. Diese gibt es innerhalb der Symfony Expression Language bei TYPO3 wieder, nur die Syntax ist eine andere. Ein paar Beispiele:<\/p>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">applicationContext<\/code> &#8211; Gibt Aufschluss \u00fcber die aktuelle Umgebung, z.B. &#8222;production&#8220; oder &#8222;development&#8220;.<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">page<\/code>\u00a0&#8211; Alle Eigenschaften der Seite als Array.<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">{$meineTypoScriptKonstante}<\/code> &#8211; erm\u00f6glicht auf den Inhalt der TypoScript-Konstanten zuzugreifen.<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">frontend.user.isLoggedIn<\/code> &#8211; ist wahr, wenn der Nutzer im Frontend angemeldet ist<\/li>\n<li>\n<p class=\"first\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">typo3.version<\/code> &#8211; aktuelle TYPO3-Version, z.B. 9.5.0-dev<\/p>\n<\/li>\n<\/ul>\n<h3>Funktionen<\/h3>\n<p>Um wirklich alle bisherigen Conditions ersetzen zu k\u00f6nnen, gibt TYPO3 neben den Variablen auch Funktionen an die Hand.<\/p>\n<ul>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">date()<\/code> &#8211; Zugriff auf das aktuelle Datum<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">like(\"Heuhaufen\", \"*Nadel\")<\/code>\u00a0 &#8211; Schaut, ob die Zeichenkette Nadel im Heuhaufen vorkommt. Das Sternchen (*) wird als Platzhalter f\u00fcr eine beliebige Zeichenkette verwendet.<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">getTSFE()<\/code> &#8211; Erm\u00f6glicht den Zugriff auf den TypoScriptFrontendController $GLOBALS[&#8218;TSFE&#8216;]<\/li>\n<li><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">request.getQueryParams()<\/code> &#8211; Ermittelt alle GET-Parameter.<\/li>\n<li>\n<p class=\"first\"><code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">site()<\/code> &#8211; Gibt die Eigenschaften der aktuellen Seitenkonfiguration zur\u00fcck.<\/p>\n<\/li>\n<\/ul>\n<p>Eine \u00dcbersicht aller Variablen und Funktionen, gibt es in der <a href=\"https:\/\/docs.typo3.org\/typo3cms\/extensions\/core\/Changelog\/9.4\/Feature-85829-ImplementSymfonyExpressionLanguageForTypoScriptConditions.html\" target=\"_blank\" rel=\"noopener noreferrer\">Feature-Beschreibung<\/a>.<\/p>\n<h3>Ausdr\u00fccke<\/h3>\n<p>Es folgen nun Beispiele, wie bisherige Conditions mit der neuen Symfony Expression Language aussehen.<\/p>\n<h4 id=\"sprachwahl\" class=\"sectionedit10\">Seitensprache<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/bis\u00a0TYPO3\u00a0v9:\r\n[globalVar\u00a0=\u00a0GP:L\u00a0=\u00a01]\r\n\u00a0\r\n\/\/\u00a0ab\u00a0TYPO3\u00a09.4\u00a0- der L-Parameter entf\u00e4llt, daher \u00dcberpr\u00fcfung der Site-Configuration\r\n[siteLanguage(\"languageId\")\u00a0==\u00a0\"1\"]\r\n\/\/ neben der Id k\u00f6nnen nun auch weitere Eigenschaften abgefragt werden\r\n[siteLanguage(\"title\")\u00a0==\u00a0\"Deutsch\"]<\/pre>\n<h3>Get- und Post-Parameter<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ bis TYPO3 v9.3\r\n[globalVar = GP:tx_myext_myplugin|bla &gt; 0]\r\n\r\n\/\/ ab TYPO3 v9.4 (GET-Parameter oder POST-Parameter)\r\n[request.getQueryParams()['tx_myext_myplugin']['bla'] &gt; 0] || \r\n [request.getParsedBody()['tx_myext_myplugin']['bla'] &gt; 0]<\/pre>\n<p><em>Aktuell gibt es hierzu noch eine Diskussion auf <a href=\"https:\/\/forge.typo3.org\/issues\/88756#change-404466\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/forge.typo3.org\/issues\/88756#change-404466<\/a>. Im jetzigen Zusantand wirft diese Abfrage eine Warnung, wenn das Array [&#8218;tx_myext_myplugin&#8216;] nicht exisitert. Es wird noch diskutiert, ob diese Abfrage zus\u00e4tzlich definiert werden soll oder die \u00dcberpr\u00fcfung bereits automatisch passiert. Danke f\u00fcr den Hinweis Clive.<\/em><\/p>\n<p>Ein Workaround ist die Funktion traverse zu nutzen (Danke Florian f\u00fcr den Hinweis). Diese ist ab TYPO3 v9 erh\u00e4ltich (s. <a href=\"https:\/\/docs.typo3.org\/m\/typo3\/reference-typoscript\/9.5\/en-us\/Conditions\/Index.html#functions-in-all-contexts\" target=\"_blank\" rel=\"noopener noreferrer\">TYPO3-Doku<\/a>).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">[traverse(request.getQueryParams(), 'tx_myext_myplugin\/bla') &gt; 0 ||\r\n  traverse(request.getParsedBody(), 'tx_myext_myplugin\/bla') &gt; 0]<\/pre>\n<h3>Ebene im Seitenbaum<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/\u00a0bis\u00a0TYPO3\u00a0v9.3\u00a0\r\n[treeLevel\u00a0=\u00a00,2]\u00a0\r\n\r\n\/\/\u00a0ab\u00a0TYPO3\u00a0v9.4\u00a0\r\n[tree.level in\u00a0[0,2]]<\/pre>\n<h3>Seite in Rootline<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/\u00a0bis\u00a0TYPO3\u00a0v9.3\u00a0\r\n[PIDinRootline =\u00a05,10]\u00a0\r\n\r\n\/\/\u00a0ab\u00a0TYPO3\u00a0v9.4\u00a0\r\n[5 in tree.rootLineIds || 10 in tree.rootLineIds]<\/pre>\n<h3>Seiteneigenschaften<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ bis TYPO3 v9.3\r\n[page|backend_layout = 1]\r\n\r\n\/\/ ab TYPO3 v9.4\r\n[page[\"backend_layout\"] == '1']<\/pre>\n<h3 id=\"domain\" class=\"sectionedit16\">Domain<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ bis TYPO3 v9.3\r\n[globalString = IENV:HTTP_HOST = *.mydomain.com]\r\n\r\n\/\/ ab TYPO3 v9.4\r\n[like(request.getNormalizedParams().getHttpHost(), '*.mydomain.com')]<\/pre>\n<h3>Konstanten<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ bis TYPO3 v9.3\r\n[globalVar = LIT:1 = {$meineTypoScriptKonstante}]\r\n\r\n\/\/ ab TYPO3 v9.4\r\n[\"{$meineTypoScriptKonstante}\" == \"1\"]<\/pre>\n<h3>Nutzer im Backend eingeloggt<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ bis TYPO3 v9.3\r\n[globalVar = TSFE:beUserLogin &gt; 0]\r\n\r\n\/\/ ab TYPO3 v9.4\r\n[getTSFE().beUserLogin]<\/pre>\n<h3>Ist heute Freitag?<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\/\/ bis TYPO3 v9.3\r\n[dayofweek = 5]\r\n\r\n\/\/ ab TYPO3 v9.4\r\n[date(\"w\") == 5]<\/pre>\n<h4>Weitere Beispiele<\/h4>\n<p>Wie bereits erw\u00e4hnt sind die M\u00f6glichkeiten der Conditions kaum begrenzt. Weiterf\u00fchrende Links mit zus\u00e4tzlichen Beispielen sind am Ende des Blog-Beitrags zusammengetragen.<\/p>\n<h3>Erweitern der Expression Language<\/h3>\n<p>Bisher konnten eigene Funktionen via <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">[userFunc = \\Vendor\\Extension\\UserFunc\\MyUserFunc('foo')]<\/code> verwendet werden. Auch die Symfony Expression Language l\u00e4sst sich beliebig erweitern.<\/p>\n<p>Dazu wird zun\u00e4chst der eigene Provider in einer aktiven Extension unter <em>Configuration\/ExpressionLanguage.php<\/em> registriert.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\n\r\nreturn [\r\n\u00a0\u00a0\u00a0\u00a0'typoscript' =&gt; [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\\Vendor\\Extension\\ExpressionLanguage\\MyConditionProvider::class,\r\n\u00a0\u00a0\u00a0\u00a0]\r\n];<\/pre>\n<p>Die Klasse muss das\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">\\TYPO3\\CMS\\Core\\ExpressionLanguage\\ProviderInterface<\/code> umsetzen. Dieses besteht aus den beiden Funktionen\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">getExpressionLanguageProviders()<\/code> und\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">getExpressionLanguageVariables()<\/code>.\u00a0F\u00fcr die Umsetzung kann von der Klasse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">\\TYPO3\\CMS\\Core\\ExpressionLanguage\\AbstractProvider<\/code> abgleitet werden.<\/p>\n<p>Als Beispiel schauen wir uns den\u00a0TypoScriptConditionProvider aus dem Core an.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">class TypoScriptConditionProvider extends AbstractProvider\r\n{\r\n    public function __construct()\r\n    {\r\n        $typo3 = new \\stdClass();\r\n        $typo3-&gt;version = TYPO3_version;\r\n        $typo3-&gt;branch = TYPO3_branch;\r\n        $typo3-&gt;devIpMask = trim($GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']);\r\n        $this-&gt;expressionLanguageVariables = [\r\n            'request' =&gt; GeneralUtility::makeInstance(RequestWrapper::class, $GLOBALS['TYPO3_REQUEST'] ?? null),\r\n            'applicationContext' =&gt; (string)GeneralUtility::getApplicationContext(),\r\n            'typo3' =&gt; $typo3,\r\n        ];\r\n        $this-&gt;expressionLanguageProviders = [\r\n            Typo3ConditionFunctionsProvider::class\r\n        ];\r\n    }\r\n}<\/pre>\n<h2>Symfony und TYPO3<\/h2>\n<p>Die Symfony Expression Language ist eines von vielen Vorz\u00fcgen der neuen <a href=\"https:\/\/www.clickstorm.de\/blog\/wir-freuen-uns-auf-typo3-9-lts\/\" target=\"_blank\" rel=\"noopener noreferrer\">TYPO3 9 LTS<\/a>. Wir freuen uns sehr, dass TYPO3 Teile von Symfony \u00fcbernimmt, da wir dieses Framework auch Unabh\u00e4ngig von TYPO3 einsetzen. In unseren <a href=\"https:\/\/www.clickstorm.de\/referenzen\/\" target=\"_blank\" rel=\"noopener noreferrer\">Individual-Programmierungen<\/a> setzen wir auf Symfony seit vielen Jahren und haben durchweg positive Erfahrungen gesammelt.<\/p>\n<p>Fragen oder Anmerkungen zum Artikel k\u00f6nnen Sie wie immer gerne als Kommentar hinterlassen. M\u00f6chten Sie selbst eine Webseite mittels TYPO3 oder Symfony realisieren, dann nehmen Sie gerne mit uns <a href=\"https:\/\/www.clickstorm.de\/kontakt\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kontakt<\/a> auf.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erfahren Sie, wie m\u00e4chtig die TypoScript Conditions in TYPO3 v9.5 LTS sind<\/p>\n","protected":false},"author":7,"featured_media":3437,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[135],"tags":[45,98,20,9,259],"class_list":["post-3420","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cms","tag-entwicklung","tag-php","tag-symfony","tag-typo3","tag-typoscript"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TypoScript Conditions mit der Symfony Expression Language - clickstorm Blog<\/title>\n<meta name=\"description\" content=\"F\u00fcr die TYPO3 v9.5 LTS wurde die Symfony Expression Language bei den TypoScript Conditions eingef\u00fchrt. Migrieren Sie jetzt ihren Code! Wir zeigen wie.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TypoScript Conditions mit der Symfony Expression Language - clickstorm Blog\" \/>\n<meta property=\"og:description\" content=\"F\u00fcr die TYPO3 v9.5 LTS wurde die Symfony Expression Language bei den TypoScript Conditions eingef\u00fchrt. Migrieren Sie jetzt ihren Code! Wir zeigen wie.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/\" \/>\n<meta property=\"og:site_name\" content=\"clickstorm Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/de-de.facebook.com\/clickstorm\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-12-20T14:28:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-13T10:21:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/12\/shutterstock_1022163202.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"781\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marc\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:site\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marc\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/\"},\"author\":{\"name\":\"Marc\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/594fb824a2f049d33b2a1b4406bfc86b\"},\"headline\":\"TypoScript Conditions mit der Symfony Expression Language\",\"datePublished\":\"2018-12-20T14:28:27+00:00\",\"dateModified\":\"2025-11-13T10:21:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/\"},\"wordCount\":939,\"commentCount\":19,\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/shutterstock_1022163202.jpg\",\"keywords\":[\"Entwicklung\",\"PHP\",\"Symfony\",\"TYPO3\",\"TypoScript\"],\"articleSection\":[\"CMS\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/\",\"name\":\"TypoScript Conditions mit der Symfony Expression Language - clickstorm Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/shutterstock_1022163202.jpg\",\"datePublished\":\"2018-12-20T14:28:27+00:00\",\"dateModified\":\"2025-11-13T10:21:29+00:00\",\"description\":\"F\u00fcr die TYPO3 v9.5 LTS wurde die Symfony Expression Language bei den TypoScript Conditions eingef\u00fchrt. Migrieren Sie jetzt ihren Code! Wir zeigen wie.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/shutterstock_1022163202.jpg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2018\\\/12\\\/shutterstock_1022163202.jpg\",\"width\":1170,\"height\":781,\"caption\":\"Brokkoli in einer Hand, in der anderen einen Donout\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/typoscript-conditions-symfony-expression-language\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TypoScript Conditions mit der Symfony Expression Language\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"name\":\"clickstorm Blog\",\"description\":\"Neuigkeiten rund um Webentwicklung\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\",\"name\":\"clickstorm GmbH\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"caption\":\"clickstorm GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/de-de.facebook.com\\\/clickstorm\\\/\",\"https:\\\/\\\/x.com\\\/clickstorm_gmbh\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCEaU1eUbug6OiI4uU6vA-cA\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/594fb824a2f049d33b2a1b4406bfc86b\",\"name\":\"Marc\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"caption\":\"Marc\"},\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/author\\\/marc\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TypoScript Conditions mit der Symfony Expression Language - clickstorm Blog","description":"F\u00fcr die TYPO3 v9.5 LTS wurde die Symfony Expression Language bei den TypoScript Conditions eingef\u00fchrt. Migrieren Sie jetzt ihren Code! Wir zeigen wie.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/","og_locale":"de_DE","og_type":"article","og_title":"TypoScript Conditions mit der Symfony Expression Language - clickstorm Blog","og_description":"F\u00fcr die TYPO3 v9.5 LTS wurde die Symfony Expression Language bei den TypoScript Conditions eingef\u00fchrt. Migrieren Sie jetzt ihren Code! Wir zeigen wie.","og_url":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/","og_site_name":"clickstorm Blog","article_publisher":"https:\/\/de-de.facebook.com\/clickstorm\/","article_published_time":"2018-12-20T14:28:27+00:00","article_modified_time":"2025-11-13T10:21:29+00:00","og_image":[{"width":1170,"height":781,"url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/12\/shutterstock_1022163202.jpg","type":"image\/jpeg"}],"author":"Marc","twitter_card":"summary_large_image","twitter_creator":"@clickstorm_gmbh","twitter_site":"@clickstorm_gmbh","twitter_misc":{"Verfasst von":"Marc","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#article","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/"},"author":{"name":"Marc","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/594fb824a2f049d33b2a1b4406bfc86b"},"headline":"TypoScript Conditions mit der Symfony Expression Language","datePublished":"2018-12-20T14:28:27+00:00","dateModified":"2025-11-13T10:21:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/"},"wordCount":939,"commentCount":19,"publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/12\/shutterstock_1022163202.jpg","keywords":["Entwicklung","PHP","Symfony","TYPO3","TypoScript"],"articleSection":["CMS"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/","url":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/","name":"TypoScript Conditions mit der Symfony Expression Language - clickstorm Blog","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#primaryimage"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/12\/shutterstock_1022163202.jpg","datePublished":"2018-12-20T14:28:27+00:00","dateModified":"2025-11-13T10:21:29+00:00","description":"F\u00fcr die TYPO3 v9.5 LTS wurde die Symfony Expression Language bei den TypoScript Conditions eingef\u00fchrt. Migrieren Sie jetzt ihren Code! Wir zeigen wie.","breadcrumb":{"@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#primaryimage","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/12\/shutterstock_1022163202.jpg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2018\/12\/shutterstock_1022163202.jpg","width":1170,"height":781,"caption":"Brokkoli in einer Hand, in der anderen einen Donout"},{"@type":"BreadcrumbList","@id":"https:\/\/www.clickstorm.de\/blog\/typoscript-conditions-symfony-expression-language\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.clickstorm.de\/blog\/"},{"@type":"ListItem","position":2,"name":"TypoScript Conditions mit der Symfony Expression Language"}]},{"@type":"WebSite","@id":"https:\/\/www.clickstorm.de\/blog\/#website","url":"https:\/\/www.clickstorm.de\/blog\/","name":"clickstorm Blog","description":"Neuigkeiten rund um Webentwicklung","publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.clickstorm.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.clickstorm.de\/blog\/#organization","name":"clickstorm GmbH","url":"https:\/\/www.clickstorm.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","caption":"clickstorm GmbH"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/de-de.facebook.com\/clickstorm\/","https:\/\/x.com\/clickstorm_gmbh","https:\/\/www.youtube.com\/channel\/UCEaU1eUbug6OiI4uU6vA-cA"]},{"@type":"Person","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/594fb824a2f049d33b2a1b4406bfc86b","name":"Marc","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","caption":"Marc"},"url":"https:\/\/www.clickstorm.de\/blog\/author\/marc\/"}]}},"_links":{"self":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/3420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/comments?post=3420"}],"version-history":[{"count":11,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/3420\/revisions"}],"predecessor-version":[{"id":5086,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/3420\/revisions\/5086"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media\/3437"}],"wp:attachment":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media?parent=3420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/categories?post=3420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/tags?post=3420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}