{"id":4703,"date":"2021-02-23T09:01:14","date_gmt":"2021-02-23T08:01:14","guid":{"rendered":"https:\/\/www.clickstorm.de\/blog\/?p=4703"},"modified":"2022-10-25T10:24:12","modified_gmt":"2022-10-25T08:24:12","slug":"rector-php-typo3-upgrades","status":"publish","type":"post","link":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/","title":{"rendered":"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades"},"content":{"rendered":"<p>Rector ist ein PHP-Paket, welches den PHP-Code automatisiert, aktualisiert und sauber h\u00e4lt. Anhand von Regelwerken durchsucht es den bestehenden Code und bringt ihn gegebenfalls auf den neuesten Stand. Somit ist Rector bei zwei Anwendungsf\u00e4llen hilfreich:<\/p>\n<ol>\n<li>Du aktualisierst deine PHP-Version oder Anwendung (z.B. TYPO3) und musst somit auch deinen Code anpassen.<\/li>\n<li>Um die Qualit\u00e4t deines PHP-Codes im Programmieralltag zu gew\u00e4hrleisten.<\/li>\n<\/ol>\n<p>Ein Beispiel gef\u00e4llig? Kein Problem. Hier kommt ein einfaches Szenario:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"diff\"> \u00a0\u00a0\u00a0\u00a0public\u00a0function\u00a0run()\r\n\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$items\u00a0=\u00a0[];\r\n-\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array_push($items,\u00a0$item);\r\n+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$items[]\u00a0=\u00a0$item;\r\n \u00a0\u00a0\u00a0\u00a0}<\/pre>\n<p>In diesem Beispiel w\u00fcrde Rector die Funktion <code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">array_push()<\/code> durch eine zeitgem\u00e4\u00dfe Schreibweise ersetzen.<\/p>\n<p>Ein wenig komplexer darf es schon sein? Auch das ist kein Problem.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"diff\">\u00a0class\u00a0MyViewHelper\u00a0implements\u00a0ViewHelperInterface\r\n\u00a0{\r\n-\u00a0\u00a0\u00a0\u00a0public\u00a0function\u00a0render(array\u00a0$firstParameter,\u00a0string\u00a0$secondParameter\u00a0=\u00a0null)\r\n+\u00a0\u00a0\u00a0\u00a0public\u00a0function\u00a0initializeArguments()\r\n\u00a0\u00a0\u00a0\u00a0\u00a0{\r\n+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;registerArgument('firstParameter',\u00a0'array',\u00a0'',\u00a0true);\r\n+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;registerArgument('secondParameter',\u00a0'string',\u00a0'',\u00a0false,\u00a0null);\r\n+\u00a0\u00a0\u00a0\u00a0}\r\n+\r\n+\u00a0\u00a0\u00a0\u00a0public\u00a0function\u00a0render()\r\n+\u00a0\u00a0\u00a0\u00a0{\r\n+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$firstParameter\u00a0=\u00a0$this-&gt;arguments['firstParameter'];\r\n+\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$secondParameter\u00a0=\u00a0$this-&gt;arguments['secondParameter'];\r\n\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\u00a0}<\/pre>\n<p>Hier werden die Argumente im TYPO3 Fluid Viewhelper nicht mehr wie in \u00e4lteren TYPO3-Versionen der Methode <code class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">render()<\/code> \u00fcbergeben. Das w\u00fcrde in TYPO3 v10.4 LTS zu einem Fehler f\u00fchren. Also werden die Argumente zun\u00e4chst deklariert und innerhalb der Funktion wieder zugewiesen. Alleine diese Regel erspart einem enorm viel Zeit.<\/p>\n<p>Unterst\u00fctzt werden neben TYPO3 auch Symfony, Drupal, CakePHP und sicherlich bald auch noch viele weitere.<\/p>\n<p>Das bei Upgrades oft genutzte &#8222;Suchen und Ersetzen&#8220; wird mittels Rector obsolet. Aber die Software kann weitaus mehr. Das Paket ist leicht zu installieren und anzuwenden. Wie genau du Rector f\u00fcr TYPO3 aufsetzt und nutzt, erf\u00e4hrst du im folgenden Artikel.<\/p>\n<h2>1. Installation von Rector f\u00fcr TYPO3<\/h2>\n<p>Rector f\u00fcr TYPO3 ist ein PHP-Paket welches einfach via <a href=\"https:\/\/www.clickstorm.de\/blog\/composer-installation-verwaltung-typo3\/\" target=\"_blank\" rel=\"noopener\">Composer<\/a> installiert werden kann.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">composer require --dev ssch\/typo3-rector<\/pre>\n<p>Sollte es zu Kompatibilit\u00e4tsproblemen bei der Installation kommen, dann einfach das folgende Paket anstatt dessen installieren.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">composer require --dev ssch\/typo3-rector-prefixed<\/pre>\n<p>An dieser Stelle ein gro\u00dfes Dankesch\u00f6n an Sebastian Schreiber und alle Entwickler, die an Rector f\u00fcr TYPO3 mitarbeiten. Als Programmierer kannst das Projekt auf <a href=\"https:\/\/github.com\/sabbelasichon\/typo3-rector\" target=\"_blank\" rel=\"noopener\">GitHub<\/a> unterst\u00fctzen. Hier findest du auch eine Anleitung, falls du kein Composer nutzt.<\/p>\n<h2>2. Konfigurieren<\/h2>\n<p>Nachdem du Rector installiert hast, muss es zun\u00e4chst noch konfiguriert werden, was allerdings schnell erledigt ist. Zun\u00e4chst f\u00fchren wir im Root-Verzeichnis, also dort, wo auch die globale composer.json liegt, folgendes Statement aus:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\/\/ F\u00fcr ssch\/typo3-rector (PHP &gt;= 7.4)\r\ncp\u00a0.\/vendor\/ssch\/typo3-rector\/templates\/rector.php.dist\u00a0rector.php\r\n\r\n\/\/ F\u00fcr rector\/rector 0.13.4 (PHP &lt; 7.4)\r\n.\/vendor\/bin\/rector\u00a0init\u00a0--template-type=typo3<\/pre>\n<p>Nun finden wir in unserem Root-Verzeichnis eine Datei namens rector.php. Den Inhalt fassen wir noch an ein zwei Stellen an, sodass die Datei wie folgt aussieht:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">&lt;?php\r\n\r\ndeclare(strict_types=1);\r\n\r\nuse Rector\\Core\\Configuration\\Option;\r\nuse Rector\\Core\\ValueObject\\PhpVersion;\r\nuse Rector\\PostRector\\Rector\\NameImportingPostRector;\r\nuse Ssch\\TYPO3Rector\\Set\\Typo3SetList;\r\nuse Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ContainerConfigurator;\r\n\r\nreturn static function (ContainerConfigurator $containerConfigurator): void {\r\n\/\/ get parameters\r\n$parameters = $containerConfigurator-&gt;parameters();\r\n\r\n\/\/\u00a0Define\u00a0what\u00a0rule\u00a0sets\u00a0will\u00a0be\u00a0applied\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_76);\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_87);\r\n$containerConfigurator-&gt;import(Typo3SetList::TCA_87);\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_95);\r\n$containerConfigurator-&gt;import(Typo3SetList::TCA_95);\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_104);\r\n$containerConfigurator-&gt;import(Typo3SetList::TCA_104);\r\n$containerConfigurator-&gt;import(Typo3SetList::DATABASE_TO_DBAL);\r\n$containerConfigurator-&gt;import(Typo3SetList::UNDERSCORE_TO_NAMESPACE);\r\n\r\n\/\/ FQN classes are not imported by default. If you don't do it manually after every Rector run, enable it by:\r\n$parameters-&gt;set(Option::AUTO_IMPORT_NAMES, true);\r\n\r\n\/\/ this will not import root namespace classes, like \\DateTime or \\Exception\r\n$parameters-&gt;set(Option::IMPORT_SHORT_CLASSES, false);\r\n\r\n\/\/ this will not import classes used in PHP DocBlocks, like in \/** @var \\Some\\Class *\/\r\n$parameters-&gt;set(Option::IMPORT_DOC_BLOCKS, false);\r\n\r\n\/\/ Define your target version which you want to support\r\n$parameters-&gt;set(Option::PHP_VERSION_FEATURES, PhpVersion::PHP_74);\r\n\r\n\/\/ If you would like to see the changelog url when a rector is applied\r\n\/\/ $parameters-&gt;set(Typo3Option::OUTPUT_CHANGELOG, true);\r\n\r\n\/\/ If you set option Typo3Option::AUTO_IMPORT_NAMES to true, you should consider excluding some TYPO3 files.\r\n$parameters-&gt;set(Option::SKIP, [\r\nNameImportingPostRector::class =&gt; [\r\n'ClassAliasMap.php',\r\n'ext_localconf.php',\r\n'ext_emconf.php',\r\n'ext_tables.php',\r\n__DIR__ . '\/**\/TCA\/*',\r\n__DIR__ . '\/**\/Configuration\/RequestMiddlewares.php',\r\n__DIR__ . '\/**\/Configuration\/Commands.php',\r\n__DIR__ . '\/**\/Configuration\/AjaxRoutes.php',\r\n__DIR__ . '\/**\/Configuration\/Extbase\/Persistence\/Classes.php',\r\n],\r\n]);\r\n\r\n\/\/ If you have trouble that rector cannot run because some TYPO3 constants are not defined add an additional constants file\r\n\/\/ Have a look at https:\/\/github.com\/sabbelasichon\/typo3-rector\/blob\/master\/typo3.constants.php\r\n\/\/ $parameters-&gt;set(Option::AUTOLOAD_PATHS, [\r\n\/\/ __DIR__ . '\/typo3.constants.php'\r\n\/\/ ]);\r\n\r\n\/\/ get services (needed for register a single rule)\r\n\/\/ $services = $containerConfigurator-&gt;services();\r\n\r\n\/\/ register a single rule\r\n\/\/ $services-&gt;set(InjectAnnotationRector::class);\r\n};<\/pre>\n<p>In der Zeile 18 habe ich definiert, welche Regelsammlungen angewendet werden sollen.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">\/\/ Define what rule sets will be applied\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_76);\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_87);\r\n$containerConfigurator-&gt;import(Typo3SetList::TCA_87);\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_95);\r\n$containerConfigurator-&gt;import(Typo3SetList::TCA_95);\r\n$containerConfigurator-&gt;import(Typo3SetList::TYPO3_104);\r\n$containerConfigurator-&gt;import(Typo3SetList::TCA_104);\r\n$containerConfigurator-&gt;import(Typo3SetList::DATABASE_TO_DBAL);\r\n$containerConfigurator-&gt;import(Typo3SetList::UNDERSCORE_TO_NAMESPACE);<\/pre>\n<p>Eine \u00dcbersicht aller <a href=\"https:\/\/github.com\/sabbelasichon\/typo3-rector\/blob\/master\/docs\/all_rectors_overview.md\" target=\"_blank\" rel=\"noopener\">Regeln<\/a> speziell f\u00fcr TYPO3 findet ihr im GitHub, ebenso wie die \u00dcbersicht aller <a href=\"https:\/\/github.com\/sabbelasichon\/typo3-rector\/blob\/master\/src\/Set\/Typo3SetList.php\" target=\"_blank\" rel=\"noopener\">Regelsammlungen<\/a>.<\/p>\n<p>Neben den Regelsammlungen habe ich in Zeile 39 die Ziel-PHP-Version von PHP_72 auf PHP_74 angehoben.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\">\/\/ Define your target version which you want to support\r\n$parameters-&gt;set(Option::PHP_VERSION_FEATURES, PhpVersion::PHP_74);<\/pre>\n<p>Es ist nicht zwingend notwendig, dass Rector dann auch mit PHP 7.4 ausgef\u00fchrt wird, die PHP-Applikation sollte es hingegen schon. Die \u00fcber 600 allgemeinen Rector PHP Regeln gibt es ebenfalls auf <a href=\"https:\/\/github.com\/rectorphp\/rector\/blob\/master\/docs\/rector_rules_overview.md\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>.<\/p>\n<h2>3. Rector ausf\u00fchren<\/h2>\n<p>Einmal konfiguriert, kann Rector auf jeden beliebigen Zielpfad ausgef\u00fchrt werden. Wie bereits bei der Konfiguration befinden wir uns wieder im Root-Verzeichnis, um das Tool anzuwenden.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">.\/vendor\/bin\/rector process public\/typo3conf\/ext\/my_extension --dry-run<\/pre>\n<p>Mit <code class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">--dry-run<\/code> wird wie bei Composer zun\u00e4chst angezeigt, welche \u00c4nderungen durchgef\u00fchrt werden.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-4709 size-full\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/rector_php_typo3_dry-run.png\" alt=\"Beispielhafte Anzeige der PHP-\u00c4nderungen via TYPO3 Rector in der Shell\" width=\"1240\" height=\"692\" srcset=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/rector_php_typo3_dry-run.png 1240w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/rector_php_typo3_dry-run-300x167.png 300w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/rector_php_typo3_dry-run-1024x571.png 1024w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/rector_php_typo3_dry-run-768x429.png 768w\" sizes=\"auto, (max-width: 1240px) 100vw, 1240px\" \/><\/p>\n<p>Wenn alles soweit ok ist, dann f\u00fchren wir die Aktion nochmal durch, nur ohne den Parameter.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">vendor\/bin\/typo3-rector\u00a0process\u00a0public\/typo3conf\/ext\/my_extension<\/pre>\n<p>Alle \u00c4nderungen sind somit in den Dateien gespeichert. Wie bereits beschrieben, l\u00e4sst sich der Pfad beliebig anpassen.<br \/>\nNun w\u00fcnschen wir dir viel Spa\u00df beim Anwenden.<\/p>\n<p>Sebastian Schreiber hat mit <a href=\"https:\/\/nevercodealone.de\/de\" target=\"_blank\" rel=\"noopener\">Never Code Alone<\/a> das Tool nochmal ausgiebiger vorgestellt.<\/p>\n<div class=\"privacy-container js-privacy-msg-video\"><img decoding=\"async\" class=\"privacy-text-image\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/plugins\/clickstorm-embed\/images\/comment-alt-exclamation.svg\" alt=\"Info Icon\"><\/p>\n<p class=\"privacy-text\">Dieses Video wird \u00fcber eine externe Plattform (YouTube) gehostet. Das Laden bedarf der Zustimmung unserer <a class=\"privacy-text-link\" href=\"https:\/\/www.clickstorm.de\/blog\/datenschutz\/\" target=\"_blank\">Datenschutzbestimmungen.<\/a><\/p>\n<p><a class=\"btn btn-primary btn-cookie js-cookie-open-modal\" data-cs-cookie-anchor=\"externalMedia\" href=\"#\">Einstellung vornehmen<\/a><\/div>\n<div class=\"iframe\"><iframe class=\"js-iframe-privacy-video\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"\" data-src=\"https:\/\/www.youtube-nocookie.com\/embed\/-_-YPFfL8wo\"><\/iframe><\/div>\n<h2>Rector kann mehr<\/h2>\n<p>Wenn du kein TYPO3 nutzt, kannst du trotzdem Rector f\u00fcr deine PHP-Anwendung nutzen. Die Anleitung dazu findest du im <a href=\"https:\/\/github.com\/rectorphp\/rector\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>. Zudem wird das Projekt stetig weiterentwickelt, wodruch sich ein Blick auf die aktuelle Dokumentation immer lohnt.<\/p>\n<p>Neben den bereits bestehenden Regeln, l\u00e4sst sich die Software beliebig <a href=\"https:\/\/github.com\/rectorphp\/rector\/blob\/master\/docs\/create_own_rule.md\" target=\"_blank\" rel=\"noopener\">erweitern<\/a>. Wenn du neue Regeln f\u00fcr TYPO3 hast, <a href=\"https:\/\/github.com\/sabbelasichon\/typo3-rector\/blob\/master\/docs\/contribution.md\" target=\"_blank\" rel=\"noopener\">teile<\/a> sie gerne.<\/p>\n<p>Erfahre in einem weiteren <a href=\"https:\/\/www.clickstorm.de\/blog\/update-typo3-version-10\/\" target=\"_blank\" rel=\"noopener\">Blog-Artikel<\/a>, was beim Update auf die TYPO3 v10.4 LTS zu beachten ist.<\/p>\n<p>Hast du bereits Erfahrungen mit Rector oder sollen wir mal ein anderes Tool \/ eine Extension vorstellen? Schreibt uns das gerne in den Kommentaren oder auf unseren Social Media Kan\u00e4len. Wir freuen uns \u00fcber euer Feedback.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit Rector lassen sich PHP-Aktuialisierung automatisieren<\/p>\n","protected":false},"author":7,"featured_media":4722,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[135,138],"tags":[45,98,9,86],"class_list":["post-4703","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cms","category-tools","tag-entwicklung","tag-php","tag-typo3","tag-update"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades - clickstorm Blog<\/title>\n<meta name=\"description\" content=\"Mit Rector werden Aktualisierungen im Code f\u00fcr PHP und TYPO3 automatisiert durchgef\u00fchrt. Erfahre wie du dein Update vereinfachst.\" \/>\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\/rector-php-typo3-upgrades\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades - clickstorm Blog\" \/>\n<meta property=\"og:description\" content=\"Mit Rector werden Aktualisierungen im Code f\u00fcr PHP und TYPO3 automatisiert durchgef\u00fchrt. Erfahre wie du dein Update vereinfachst.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/\" \/>\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=\"2021-02-23T08:01:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-10-25T08:24:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/reactor-inputcode_teaser-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"577\" \/>\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\\\/rector-php-typo3-upgrades\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/\"},\"author\":{\"name\":\"Marc\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/594fb824a2f049d33b2a1b4406bfc86b\"},\"headline\":\"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades\",\"datePublished\":\"2021-02-23T08:01:14+00:00\",\"dateModified\":\"2022-10-25T08:24:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/\"},\"wordCount\":656,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/reactor-inputcode_teaser-01.jpg\",\"keywords\":[\"Entwicklung\",\"PHP\",\"TYPO3\",\"Update\"],\"articleSection\":[\"CMS\",\"Tools\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/\",\"name\":\"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades - clickstorm Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/reactor-inputcode_teaser-01.jpg\",\"datePublished\":\"2021-02-23T08:01:14+00:00\",\"dateModified\":\"2022-10-25T08:24:12+00:00\",\"description\":\"Mit Rector werden Aktualisierungen im Code f\u00fcr PHP und TYPO3 automatisiert durchgef\u00fchrt. Erfahre wie du dein Update vereinfachst.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/reactor-inputcode_teaser-01.jpg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/reactor-inputcode_teaser-01.jpg\",\"width\":1170,\"height\":577,\"caption\":\"Rector f\u00fcr PHP und TYPO3, Programmcode\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/rector-php-typo3-upgrades\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades\"}]},{\"@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":"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades - clickstorm Blog","description":"Mit Rector werden Aktualisierungen im Code f\u00fcr PHP und TYPO3 automatisiert durchgef\u00fchrt. Erfahre wie du dein Update vereinfachst.","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\/rector-php-typo3-upgrades\/","og_locale":"de_DE","og_type":"article","og_title":"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades - clickstorm Blog","og_description":"Mit Rector werden Aktualisierungen im Code f\u00fcr PHP und TYPO3 automatisiert durchgef\u00fchrt. Erfahre wie du dein Update vereinfachst.","og_url":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/","og_site_name":"clickstorm Blog","article_publisher":"https:\/\/de-de.facebook.com\/clickstorm\/","article_published_time":"2021-02-23T08:01:14+00:00","article_modified_time":"2022-10-25T08:24:12+00:00","og_image":[{"width":1170,"height":577,"url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/reactor-inputcode_teaser-01.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\/rector-php-typo3-upgrades\/#article","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/"},"author":{"name":"Marc","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/594fb824a2f049d33b2a1b4406bfc86b"},"headline":"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades","datePublished":"2021-02-23T08:01:14+00:00","dateModified":"2022-10-25T08:24:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/"},"wordCount":656,"commentCount":4,"publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/reactor-inputcode_teaser-01.jpg","keywords":["Entwicklung","PHP","TYPO3","Update"],"articleSection":["CMS","Tools"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/","url":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/","name":"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades - clickstorm Blog","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/#primaryimage"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/reactor-inputcode_teaser-01.jpg","datePublished":"2021-02-23T08:01:14+00:00","dateModified":"2022-10-25T08:24:12+00:00","description":"Mit Rector werden Aktualisierungen im Code f\u00fcr PHP und TYPO3 automatisiert durchgef\u00fchrt. Erfahre wie du dein Update vereinfachst.","breadcrumb":{"@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/#primaryimage","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/reactor-inputcode_teaser-01.jpg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2021\/02\/reactor-inputcode_teaser-01.jpg","width":1170,"height":577,"caption":"Rector f\u00fcr PHP und TYPO3, Programmcode"},{"@type":"BreadcrumbList","@id":"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.clickstorm.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Rector f\u00fcr PHP und TYPO3 beschleunigt Upgrades"}]},{"@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\/4703","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=4703"}],"version-history":[{"count":11,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/4703\/revisions"}],"predecessor-version":[{"id":5328,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/4703\/revisions\/5328"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media\/4722"}],"wp:attachment":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media?parent=4703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/categories?post=4703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/tags?post=4703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}