{"id":544,"date":"2016-03-21T08:59:01","date_gmt":"2016-03-21T06:59:01","guid":{"rendered":"https:\/\/schwarzer.de\/blog\/?p=544"},"modified":"2020-09-15T14:23:22","modified_gmt":"2020-09-15T12:23:22","slug":"extension-entwicklung-mit-extbase-teil-2","status":"publish","type":"post","link":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/","title":{"rendered":"Extension-Entwicklung mit Extbase (Teil 2)"},"content":{"rendered":"<p><!-- <ezTOC> --><\/p>\n<h2 id=\"das-grundger\u00fcst-extension-entwicklung-mit-extbase\">Das Grundger\u00fcst: Extension-Entwicklung mit Extbase<\/h2>\n<p>Ab Typo3 6.2 schwirren einige Begriffe durch die Luft des Webentwicklers: <strong>Extbase, Domain, Model, View, Controller, Fluid, <\/strong> usw. Hier ist nicht von irgendwelchen Grundz\u00fcgen des Programmierens die Rede, sondern das hier ist Programmieren 2.0. Wer die Grundlagen des Codings und Objektorientierte Programmierung nicht verstanden hat, dem wird Extbase mit Fluid mehr als ein gro\u00dfes Fragezeichen sein.<\/p>\n<p>In diesem zweiten Teil geht die Typo3 Entwicklung n\u00e4mlich in eine neue Runde. Dieser baut auf dem <a href=\"https:\/\/schwarzer.de\/blog\/einfuehrung-typo3-extension-entwicklung-mit-extbase\/\">ersten Teil<\/a> auf. Wir empfehlen auch diesen sozusagen als Vorspeise zu lesen.<\/p>\n<h2 id=\"vorbereitung-werkzeuge-f\u00fcr-typo3-in-kombination-mit-extbasefluid\">Vorbereitung: Werkzeuge f\u00fcr Typo3 in Kombination mit Extbase\/Fluid<\/h2>\n<p>Die richtig Hartgesottenen programmieren nat\u00fcrlich in einem dunklen Terminalfenster in <code>vi<\/code>. Wer jetzt aber auf weniger Schmerzen steht, kann (wie jeder andere normale Entwickler auf dieser Erde) eine komfortable Entwicklungsumgebung benutzen. Das ist dann im Vergleich zu <code>vim<\/code> der Mercedes unter den Produktivit\u00e4tstools. Wir empfehlen an dieser Stelle alternativlos PHP Storm. Diese IDE ist erweiterbar und macht einem Extbase-Entwickler das Leben mehr als einfacher. Neben gew\u00f6hnlichem Syntax-Highlighting denkt dieser intelligente Schraubenschl\u00fcssel n\u00e4mlich mit: Er wei\u00df nicht nur, welche Gr\u00f6\u00dfe die Schraube hat, in welche Richtung gedreht werden muss und warum \u00fcberhaupt. Ich \u00fcbersetze in kurz: PHP Storm hat erweitertes Intellitext. Nicht nur, dass es die Befehle in der aktuellen Datei erkennen kann, sondern auch in dem ganzen Projekt und auch inklusive aller Dateien im MVC. Man kann damit nat\u00fcrlich auch TypoScript bearbeiten und das mit buntestem Syntax-Hightlighting. Was hat Extbase noch zu bieten? Ach ja, Fluid-Templates, die Sprachdateien (<code>xlf<\/code>-Formate) und vieles, vieles mehr. Zwar kostet PHPStorm ein bisschen Bares, ist das Geld aber mehr als wert. Wir haben Alternativen getestet, doch diese konnten uns nicht \u00fcberzeugen.<\/p>\n<h2 id=\"how-to-create-extbase-extensions-so-geht-das\">How to create Extbase extensions: So geht das<\/h2>\n<p>Nat\u00fcrlich sollte unser Typo3 nicht nur fl\u00fcssig laufen, sondern auch unser Wissen bez\u00fcglich PHPStorm ge\u00f6lt sein. Wer mit der IDE gut umgehen kann und einige Tastenkombinationen beherrscht, der wird sehr schnell an sein Ziel kommen: Die erste Typo3-Extbase-Extension. Und das ist vielleicht im ersten Schritt nicht mal so kompliziert. Typo3 erleichtert hier mit einer kleinen aber feinen Extension die Initialarbeit. Der selbsterkl\u00e4rende Name <strong>Extension Builder<\/strong> wird ganz entspannt \u00fcber den Extension Manager installiert und wartet dann im linken Men\u00fc auf seinen flei\u00dfigen Einsatz. Empfehlenswert ist es, hier immer die neueste Version zu installieren, um eventuelle Bugs zu vermeiden. Ja, und was macht der Extension Builder genau? Wir haben ja <a href=\"https:\/\/schwarzer.de\/blog\/einfuehrung-typo3-extension-entwicklung-mit-extbase\/\">aus guten Quellen<\/a> erfahren, dass eine Extbase-Extension aus mehreren Teilen besteht.<\/p>\n<p>Zum Einen ist da das Model, also das Datenmodell, die Datenstruktur. Und genau diese kann uns der Extension Builder helfen aufzubauen. Er macht sich an die Arbeit und erstellt in flei\u00dfigster Kleinarbeit nicht nur die Datenbankstruktur (\u00e4hnlich wie in <strong>pibase<\/strong>) sondern auch die Schnittstelle zwischen den Daten und der Datenlogik. Hier entstehen dann Repositories, also Klassen, die einzelne Datens\u00e4tze ausliefern, je nach dem wie man sie gefiltert haben m\u00f6chte. Und die jeweiligen Datenobjekte mit ihren Eigenschaften. Und hier liegt die meiste Arbeit: Diese Klassen haben n\u00e4mlich f\u00fcr jede Klasse, dort f\u00fcr jedes Attribut sogenannte <strong>Getter<\/strong> und <strong>Setter<\/strong>. Auch dieser fast selbserkl\u00e4rende Name beschreibt ganz gut, was diese denn tun: sie <em>holen<\/em> und <em>setzen<\/em> Eigenschaften des Objekts. Aber warum denn so kompliziert? Darum: Alles, was \u00fcber eine Methode gesetzt wird, kann vor dem Speichern in die Datenbank manipuliert werden. Das Gleiche gilt f\u00fcr den anderen Teil: Wenn Typo3 mit Extbase aus der Datenbank Datens\u00e4tze liest, k\u00f6nnen einzelne Attribute abgewandelt, \u00fcberpr\u00fcft und hier anschlie\u00dfend auch wieder angepasst werden, bevor sie dem einzelnen Objekt zugewiesen werden. Mit diesem Objekt geht es dann nat\u00fcrlich weiter. Wie auf einem Flie\u00dfband wird es in der Programmlogik weitergereicht: Vom Model in den View, vom View dann in den Controller &#8212; eben <strong>MVC<\/strong>. Im View wird dann festgelegt, wie die Ansicht des Objekts im Backend oder im Frontend aussieht. Schlie\u00dflich soll es ja eine sch\u00f6ne Website werden und nicht Augenschmerzen verursachen, wenn man l\u00e4nger als f\u00fcnf Sekunden verweilt. Die Datenein- und -ausgabe geschieht hier aber auch nicht ungefiltert: Man kann mit dem Controller <em>kontrollieren<\/em> (was f\u00fcr ein gl\u00fccklicher Zufall, dass auch hier die Begriffe selbstsprechend sind), wie die Daten verarbeitet werden.<\/p>\n<h2 id=\"extbase-entwicklung-ganz-andere-welt\">Extbase-Entwicklung: Ganz andere Welt<\/h2>\n<p>Genial an der Entwicklung mit Extbase ist, dass man hier die Ebenen teilt, die tats\u00e4chlich auch nicht zusammengemischt werden d\u00fcrfen:<\/p>\n<ul>\n<li>Die Daten in der Datenbank (Datenhaltungsschicht),<\/li>\n<li>die Verarbeitung der Daten (Logistikschicht),<\/li>\n<li>und die Datenausgabe (die Pr\u00e4sentationsschicht).<\/li>\n<\/ul>\n<p>Somit hat man es selbst bei sehr gro\u00dfen Projekten einfacher, den \u00dcberblick \u00fcber den Code zu behalten. Und damit bleibt die Erweiterung nat\u00fcrlich wartbar und der n\u00e4chste Entwicklerkollege wird nicht fluchend auf die Tastatur schlagen, weil dieses Prinzip eingehalten werden <em>muss<\/em> &#8212; denn ansonsten w\u00e4re es keine echte Extbase-Extension geworden.<\/p>\n<p><i>Titelbild:<\/i> By malenki (Own work) [<a href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\">CC BY-SA 3.0<\/a>], <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File%3AHeinz_St%C3%BCcke_-_gefundenes_Werkzeug_(Glauchau_2015).jpg\">via Wikimedia Commons<\/a><!-- <\/ezTOC> --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Grundger\u00fcst: Extension-Entwicklung mit Extbase Ab Typo3 6.2 schwirren einige Begriffe durch die Luft des Webentwicklers: Extbase, Domain, Model, View, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":549,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[51,287],"tags":[256,266,267,269,295],"features_image":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-Extbase-entwicklung-tutorial-schwarzer.de_.png","rk_cat":null,"rk_date":"21.03.2016","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Extension-Entwicklung mit Extbase (Teil 2) - Schwarzer.de Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extension-Entwicklung mit Extbase (Teil 2) - Schwarzer.de Blog\" \/>\n<meta property=\"og:description\" content=\"Das Grundger\u00fcst: Extension-Entwicklung mit Extbase Ab Typo3 6.2 schwirren einige Begriffe durch die Luft des Webentwicklers: Extbase, Domain, Model, View, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Schwarzer.de Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-21T06:59:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-15T12:23:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-Extbase-entwicklung-tutorial-schwarzer.de_.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1284\" \/>\n\t<meta property=\"og:image:height\" content=\"688\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschrieben von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hans-J\u00fcrgen Schwarzer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/schwarzer.de\/blog\/#website\",\"url\":\"https:\/\/schwarzer.de\/blog\/\",\"name\":\"Schwarzer.de Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/schwarzer.de\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de-DE\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#primaryimage\",\"inLanguage\":\"de-DE\",\"url\":\"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-Extbase-entwicklung-tutorial-schwarzer.de_.png\",\"contentUrl\":\"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-Extbase-entwicklung-tutorial-schwarzer.de_.png\",\"width\":1284,\"height\":688,\"caption\":\"Extbase Entwicklung in Typo3\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#webpage\",\"url\":\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/\",\"name\":\"Extension-Entwicklung mit Extbase (Teil 2) - Schwarzer.de Blog\",\"isPartOf\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#primaryimage\"},\"datePublished\":\"2016-03-21T06:59:01+00:00\",\"dateModified\":\"2020-09-15T12:23:22+00:00\",\"author\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a\"},\"breadcrumb\":{\"@id\":\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#breadcrumb\"},\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/schwarzer.de\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extension-Entwicklung mit Extbase (Teil 2)\"}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a\",\"name\":\"Hans-J\u00fcrgen Schwarzer\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/schwarzer.de\/blog\/#personlogo\",\"inLanguage\":\"de-DE\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g\",\"caption\":\"Hans-J\u00fcrgen Schwarzer\"},\"description\":\"Hans-J\u00fcrgen Schwarzer leitet die Digital-Agentur schwarzer.de software + internet gmbh. Als Unternehmer und Verleger in Personalunion wie auch als leidenschaftlicher Blogger geh\u00f6rt er zu den Hauptautoren verschiedener Online-Magazine. Innerhalb seiner breiten Palette an Themen liegen dem Mainzer Lokalpatrioten dabei vermeintlich \u201eschr\u00e4ge\u201c Ideen und technische Novit\u00e4ten besonders am Herzen - Nerdstuff, wie es heute hei\u00dft.\",\"url\":\"#\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extension-Entwicklung mit Extbase (Teil 2) - Schwarzer.de Blog","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:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/","og_locale":"de_DE","og_type":"article","og_title":"Extension-Entwicklung mit Extbase (Teil 2) - Schwarzer.de Blog","og_description":"Das Grundger\u00fcst: Extension-Entwicklung mit Extbase Ab Typo3 6.2 schwirren einige Begriffe durch die Luft des Webentwicklers: Extbase, Domain, Model, View, [&hellip;]","og_url":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/","og_site_name":"Schwarzer.de Blog","article_published_time":"2016-03-21T06:59:01+00:00","article_modified_time":"2020-09-15T12:23:22+00:00","og_image":[{"width":1284,"height":688,"url":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-Extbase-entwicklung-tutorial-schwarzer.de_.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Geschrieben von":"Hans-J\u00fcrgen Schwarzer","Gesch\u00e4tzte Lesezeit":"4 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"https:\/\/schwarzer.de\/blog\/#website","url":"https:\/\/schwarzer.de\/blog\/","name":"Schwarzer.de Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/schwarzer.de\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de-DE"},{"@type":"ImageObject","@id":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#primaryimage","inLanguage":"de-DE","url":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-Extbase-entwicklung-tutorial-schwarzer.de_.png","contentUrl":"https:\/\/schwarzer.de\/blog\/wp-content\/uploads\/2016\/03\/infografik-Extbase-entwicklung-tutorial-schwarzer.de_.png","width":1284,"height":688,"caption":"Extbase Entwicklung in Typo3"},{"@type":"WebPage","@id":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#webpage","url":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/","name":"Extension-Entwicklung mit Extbase (Teil 2) - Schwarzer.de Blog","isPartOf":{"@id":"https:\/\/schwarzer.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#primaryimage"},"datePublished":"2016-03-21T06:59:01+00:00","dateModified":"2020-09-15T12:23:22+00:00","author":{"@id":"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a"},"breadcrumb":{"@id":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#breadcrumb"},"inLanguage":"de-DE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/schwarzer.de\/blog\/extension-entwicklung-mit-extbase-teil-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/schwarzer.de\/blog\/"},{"@type":"ListItem","position":2,"name":"Extension-Entwicklung mit Extbase (Teil 2)"}]},{"@type":"Person","@id":"https:\/\/schwarzer.de\/blog\/#\/schema\/person\/b4ffeb0c116fc217c80baefd49bc381a","name":"Hans-J\u00fcrgen Schwarzer","image":{"@type":"ImageObject","@id":"https:\/\/schwarzer.de\/blog\/#personlogo","inLanguage":"de-DE","url":"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64690c1ea3ab46fac7afd4778bc78364?s=96&d=mm&r=g","caption":"Hans-J\u00fcrgen Schwarzer"},"description":"Hans-J\u00fcrgen Schwarzer leitet die Digital-Agentur schwarzer.de software + internet gmbh. Als Unternehmer und Verleger in Personalunion wie auch als leidenschaftlicher Blogger geh\u00f6rt er zu den Hauptautoren verschiedener Online-Magazine. Innerhalb seiner breiten Palette an Themen liegen dem Mainzer Lokalpatrioten dabei vermeintlich \u201eschr\u00e4ge\u201c Ideen und technische Novit\u00e4ten besonders am Herzen - Nerdstuff, wie es heute hei\u00dft.","url":"#"}]}},"_links":{"self":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts\/544"}],"collection":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/comments?post=544"}],"version-history":[{"count":18,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts\/544\/revisions"}],"predecessor-version":[{"id":1293,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/posts\/544\/revisions\/1293"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/media\/549"}],"wp:attachment":[{"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/media?parent=544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/categories?post=544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/schwarzer.de\/blog\/wp-json\/wp\/v2\/tags?post=544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}