You are previewing Zukunftssichere TYPO3-Extensions mit Extbase und Fluid.
O'Reilly logo
Zukunftssichere TYPO3-Extensions mit Extbase und Fluid

Book Description

Die Extension-Entwicklung ist eine zentrale Aufgabe von TYPO3-Programmierern, kaum eine TYPO3-Installation kommt ohne zusätzliche Erweiterungen des Systems aus. Seit TYPO3 v4.3 bietet das CMS Entwicklern zwei neue, interessante Tools, um Extensions schneller programmieren und gleichzeitig sauberen, wartbaren Code produzieren zu können: das Extension-Framework Extbase und die Template-Engine Fluid.

Dieses Buch beschreibt die Programmierkonzepte der neuen Werkzeuge, zeigt aber auch ausführlich deren Einsatz in der Praxis. Dabei stammen alle Informationen aus erster Hand, denn die Autoren sind die Hauptentwickler von Extbase und Fluid, sie gewährleisten die zuverlässige Vermittlung aller Techniken, Details und Tricks. Extbase und Fluid machen Ihre TYPO3-Extensions zukunftssicher - und dieses Buch bietet Ihnen das Know-how dazu.

Table of Contents

  1. Zukunftssichere TYPO3-Extensions mit Extbase & Fluid
  2. Einführung
    1. Eine kurze Geschichte von Extbase und Fluid
    2. An wen sich dieses Buch richtet
    3. Aufbau dieses Buchs
    4. Code-Beispiele
    5. Typografische Konventionen
    6. Danksagungen
  3. 1. Installation
    1. Den Server einrichten
      1. Extbase und Fluid installieren
    2. Die Entwicklungsumgebung einrichten
      1. Autovervollständigung für Extbase und Fluid einrichten
      2. Debugging mit Xdebug
    3. Weitere hilfreiche Extensions
      1. blog_example
      2. viewhelpertest
      3. extbase_kickstarter
      4. doc_extbase
      5. devlog
      6. PHPUnit
  4. 2. Grundlagen
    1. Objektorientierte Programmierung mit PHP
      1. Warum überhaupt Objektorientierung?
      2. Klassen und Objekte
        1. Der Pfeiloperator
        2. $this
        3. Konstruktor
      3. Vererbung von Klassen
        1. Eigenschaften und Methoden überschreiben
        2. Zugriff auf die Elternklasse mittels parent
        3. Abstrakte Klassen
        4. Interfaces
      4. Sichtbarkeiten: public, private und protected
        1. Zugriff auf Eigenschaften
        2. Zugriff auf Methoden
      5. Statische Methoden und Eigenschaften
      6. Wichtige Entwurfs- und Architekturmuster
        1. Singleton
        2. Prototype
    2. Domain-Driven Design
      1. Eine gemeinsame Sprache entwickeln
      2. Die Domäne modellieren
        1. Entities
        2. Value Objects
        3. Assoziationen
      3. Aggregates
      4. Services
      5. Lebenszyklus von Objekten
      6. Objekte erzeugen mit Factories
      7. Objekte mit Repositories rekonstituieren
    3. Model-View-Controller in Extbase
      1. Das Zusammenspiel von Model, View und Controller
    4. Test-Driven Development
      1. Erst testen, dann implementieren
      2. Praxisbeispiel
      3. Einzelne Objekte testen
        1. Dependency Injection
        2. Mock-Objekte
    5. Zusammenfassung
  5. 3. Reise durch das Blog-Beispiel
    1. Erste Orientierung
    2. Die Stationen der Reise
    3. Die Extension aufrufen
    4. Und Action!
    5. Blogs aus dem Repository abholen
    6. Ein Ausflug zur Datenbank
    7. Pfade auf der Data-Map
    8. Zurück im Controller
    9. Die Ausgabe durch Fluid rendern
    10. Das Ergebnis an TYPO3 zurückgeben
    11. Alternative Reiseroute: Einen neuen Post anlegen
    12. Automatische Speicherung der Domäne
    13. Hinweise für Umsteiger
  6. 4. Eine erste Extension anlegen
    1. Die Beispiel-Extension
    2. Ordnerstruktur und Konfigurationsdateien anlegen
    3. Das Domänenmodell anlegen
    4. Produkte haltbar machen
    5. Den Ablauf steuern
    6. Das Template anlegen
    7. Das Plugin konfigurieren
  7. 5. Die Domäne modellieren
    1. Die Anwendungsdomäne
    2. Das Domänenmodell implementieren
      1. Beziehungen zwischen Domänenobjekten implementieren
      2. Geschäftslogik zu den Domänenobjekten hinzufügen
      3. Vererbung in Klassenhierarchien nutzen
      4. Domänenobjekte validieren
  8. 6. Die Persistenzschicht einrichten
    1. Die Datenbank vorbereiten
      1. Tabellen der Domänenobjekte einrichten
      2. Beziehungen zwischen Objekten einrichten
    2. Eingabemasken des Backends konfigurieren
      1. Feldtyp »input«
      2. Feldtyp »text«
      3. Feldtyp »check«
      4. Feldtyp »radio«
      5. Feldtyp »select«
      6. Feldtyp »group«
      7. Feldytp »none«
      8. Feldtyp »passthrough«
      9. Feldtyp »user«
      10. Feldtyp »flex«
      11. Feldtyp »inline«
      12. Die Repositories anlegen
    3. Individuelle Abfragen implementieren
    4. Fremde Datenquellen nutzen
    5. Klassenhierarchien abbilden
  9. 7. Den Ablauf mit Controllern steuern
    1. Controller und Actions anlegen
      1. Ablaufmuster »Eine Liste von Domänenobjekten anzeigen«
      2. Ablaufmuster »Ein einzelnes Domänenobjekt anzeigen«
      3. Ablaufmuster »Ein neues Domänenobjekt anlegen«
      4. Ablaufmuster »Ein bestehendes Domänenobjekt bearbeiten«
      5. Ablaufmuster »Ein Domänenobjekt löschen«
    2. Frontend-Plugins konfigurieren und einbinden
    3. Das Verhalten der Extension konfigurieren
  10. 8. Die Ausgabe mit Fluid gestalten
    1. Basiskonzepte
      1. Daten mit Object Accessors ausgeben
      2. Komplexere Funktionalitäten mit ViewHelpern realisieren
        1. Inline-Notation für ViewHelper
      3. Arrays als flexible Datenstrukturen
    2. Verschiedene Ausgabeformate verwenden
    3. Wiederkehrende Snippets in Partials auslagern
    4. Die Darstellung mit Layouts vereinheitlichen
    5. TypoScript zur Ausgabe nutzen: der cObject-ViewHelper
    6. Zusätzliche Tag-Attribute mit additionalAttributes einfügen
    7. Boolesche Bedingungen zur Steuerung der Ausgabe verwenden
      1. Komplexe Vergleiche realisieren
    8. Einen eigenen ViewHelper entwickeln
      1. Der Gravatar-ViewHelper
      2. Vorüberlegungen
      3. Und implementieren!
      4. Argumente eines ViewHelpers registrieren
      5. Argumente mit initializeArguments() registrieren
      6. XML-Tags mit TagBasedViewHelper erzeugen
      7. Optionale Argumente einsetzen
      8. ViewHelper auf die Inline-Syntax vorbereiten
    9. PHP-basierte Views einsetzen
      1. View-Konfigurationsoptionen im Controller
    10. Template-Erstellung am Beispiel
      1. Das HTML-Grundgerüst einrichten
      2. Aufgaben in ViewHelper auslagern
      3. Ein Formular gestalten
    11. Zusammenfassung
  11. 9. Mehrsprachigkeit, Validierung und Sicherheit
    1. Eine Extension lokalisieren und mehrsprachig auslegen
      1. Mehrsprachige Templates
        1. Platzhalter in lokalisierten Strings mit sprintf ausgeben
        2. Lokalisierte Begriffe mit TypoScript ändern
      2. Mehrsprachige Domänenobjekte
      3. Lokalisierung der Datumsausgabe
    2. Domänenobjekte validieren
      1. Validatoren zum Prüfen von Invarianten
      2. Wann wird validiert?
      3. Validatoren registrieren
        1. Validierung im Domänenmodell mit Annotations
        2. Validierung im Domänenmodell durch eigene Validatorklasse
        3. Validierung von Controller-Argumenten
        4. Zusammenspiel der Validatoren
      4. Fallbeispiel: Ein bestehendes Objekt bearbeiten
      5. Fallbeispiel: Ein Objekt erstellen
      6. Argument Mapping
    3. Sichere Extensions programmieren
      1. Eigene Datenbankabfragen erstellen
      2. Request Hashes (HMAC)
      3. Cross Site Scripting vorbeugen
    4. Zusammenfassung
  12. 10. Ausblick
    1. Eine Extension mit dem Kickstarter anlegen
      1. Konzept
      2. Beispiel-Modellierung
    2. Backend-Module
    3. Migration auf FLOW3 und TYPO3 v5
  13. A. Coding Guidelines
    1. Ordnerstruktur
    2. Datei- und Klassennamen
  14. B. Referenz für Extbase
    1. Konfiguration von Frontend-Plugins
    2. TypoScript-Konfiguration
      1. plugin.tx_[lowercasedextensionname]
    3. Model View Controller einsetzen
      1. Klassenhierarchie
      2. ActionController-API
      3. Actions
      4. Initialisierungscode definieren
      5. Validierungsfehler abfangen mit errorAction
    4. Anwendungsdomäne der Extension
      1. Domänenmodell
      2. Repositories
      3. Validatoren
    5. Validierung
      1. Eigenschaften des Domänenmodells validieren
      2. Controllerargumente validieren
    6. Lokalisierung
  15. C. Referenz für Fluid
    1. ViewHelper-Referenz
      1. Konventionen
      2. Referenz der mitgelieferten ViewHelper
        1. f:alias
          1. Argumente
          2. Beispiel
          3. Ausgabe
        2. f:base
          1. Argumente
          2. Beispiel
        3. f:cObject
          1. Argumente
          2. Beispiel
          3. Beispiel
        4. f:count
          1. Argumente
          2. Beispiel
          3. Ausgabe
        5. f:cycle
          1. Argumente
          2. Beispiel
          3. Ausgabe
        6. f:debug
          1. Argumente
          2. Beispiel
        7. f:else
        8. f:flashMessages
          1. Argumente
          2. Beispiel
        9. f:for
          1. Argumente
          2. Beispiel
          3. Ausgabe
          4. Beispiel
          5. Ausgabe
        10. f:form
          1. Argumente
          2. Beispiel
          3. Beispiel
        11. f:form.checkbox
          1. Argumente
          2. Beispiel
          3. Ausgabe
          4. Beispiel
          5. Beispiel
        12. f:form.errors
          1. Argumente
          2. Beispiel
        13. f:form.hidden
          1. Argumente
          2. Beispiel
        14. f:form.password
          1. Argumente
          2. Beispiel
        15. f:form.radio
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        16. f:form.select
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        17. f:form.submit
          1. Argumente
          2. Beispiel
        18. f:form.textarea
          1. Argumente
          2. Beispiel
        19. f:form.textbox
          1. Argumente
          2. Beispiel
        20. f:form.upload
          1. Argumente
          2. Beispiel
        21. f:format.crop
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
          5. Beispiel
        22. f:format.currency
          1. Argumente
          2. Beispiel
          3. Beispiel
        23. f:format.date
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        24. f:format.html
          1. Argumente
          2. Beispiel
          3. Beispiel
        25. f:format.nl2br
          1. Argumente
          2. Beispiel
        26. f:format.number
          1. Argumente
          2. Beispiel
          3. Beispiel
        27. f:format.padding
          1. Argumente
          2. Beispiel
          3. Beispiel
        28. f:format.printf
          1. Argumente
          2. Beispiel
          3. Beispiel
        29. f:groupedFor
          1. Argumente
          2. Beispiel
          3. Ausgabe:
        30. f:if
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        31. f:image
          1. Argumente
          2. Beispiel
        32. f:layout
          1. Argumente
          2. Beispiel
        33. f:link.action
          1. Argumente
          2. Beispiel
        34. f:link.email
          1. Argumente
          2. Beispiel
        35. f:link.external
          1. Argumente
        36. f:link.page
          1. Argumente
          2. Beispiel
          3. Beispiel
        37. f:uri.action
          1. Argumente
          2. Beispiel
        38. f:uri.email
          1. Argumente
          2. Beispiel
        39. f:uri.external
          1. Argumente
        40. f:uri.page
          1. Argumente
          2. Beispiel
          3. Beispiel
        41. f:uri.resource
          1. Argumente
          2. Beispiel
        42. f:render
          1. Argumente
          2. Beispiel
          3. Beispiel
        43. f:then
        44. f:translate
          1. Argumente
          2. Beispiel
      3. Eigene ViewHelper schreiben
        1. API des AbstractViewHelpers
        2. Eigenschaften
        3. Methoden
        4. API des TagBasedViewHelpers
        5. Eigenschaften
        6. Methoden
        7. API des TagBuilders
        8. Methoden
    2. Boolesche Ausdrücke
  16. D. Über die Autoren
  17. Stichwortverzeichnis
  18. Kolophon