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

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 ein eigenes Framework und eine Template-Engine, mit der die Extension-Entwicklung noch geschmeidiger wird - und das bei hoher Qualität des Codes. Mit Extbase und Fluid stehen zwei Tools zur Verfügung, die Sie darin unterstützen, saubere, modular gekapselte und zukunftssichere Extensions zu schreiben, die auch zu TYPO3 Neos bzw. TYPO3 FLOW portiert werden können. Dieses Buch beschreibt die Programmierkonzepte der Extension-Werkzeuge, zeigt aber auch ausführlich deren Einsatz in der Praxis. Dabei stammen alle Informationen aus erster Hand, denn die Autoren sind TYPO3-Experten, sie gewährleisten die zuverlässige Vermittlung aller Techniken, Details und Tricks. Für diese 2. Auflage wurde das Buch vollständig aktualisiert und deckt jetzt die TYPO3 CMS-Version 6.2 ab.

Table of Contents

  1. 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
  2. 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 und Links
      1. blog_example
      2. viewhelpertest
      3. extension_builder
      4. devlog
      5. PHPUnit
      6. API-Dokumentation
  3. 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
        3. Dependency Injection
    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
  4. 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
  5. 4. Eine erste Extension anlegen
    1. Die Beispiel-Extension
    2. Kickstarting der Extension
      1. Installation des Extension Builder
      2. Grundkonfiguration der Extension
      3. Erstellung des Domänenmodells
      4. Erstellen eines Frontend-Plugins
    3. Ordnerstruktur und Konfigurationsdateien
    4. Das Domänenmodell
    5. Produkte haltbar machen
    6. Den Ablauf steuern
    7. Das Template anlegen
    8. Das Plugin konfigurieren
    9. Installation und Einrichtung der Extension
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 10. Ausblick
    1. Backend-Module
    2. Extensions erweitern und erweitern lassen
      1. Erweiterung über Vererbung
      2. Das Signal-Slot-Konzept
        1. Signale emittieren
        2. Auf Signale reagieren
    3. Migration auf TYPO3 Flow und TYPO3 Neos
  12. A. Coding Guidelines
    1. Ordnerstruktur
    2. Datei- und Klassennamen
  13. B. Referenz für Extbase
    1. Konfiguration von Frontend-Plugins
    2. TypoScript-Konfiguration
      1. plugin.tx_[<span xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:pls="http://www.w3.org/2005/01/pronunciation-lexicon" xmlns:ssml="http://www.w3.org/2001/10/synthesis" xmlns:svg="http://www.w3.org/2000/svg" class="emphasis"><em>lowercasedextensionname</em></span>]]
    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
  14. C. Referenz für Fluid
    1. ViewHelper-Referenz
      1. Konventionen
      2. Referenz der mitgelieferten ViewHelper
        1. f:alias
          1. Argumente
          2. Beispiel
        2. f:base
          1. Argumente
          2. Beispiel
        3. f:cObject
          1. Argumente
          2. Beispiel
          3. Beispiel
        4. f:count
          1. Argumente
          2. Beispiel
        5. f:case
        6. f:comment
          1. Beispiel
        7. f:cycle
          1. Argumente
          2. Beispiel
        8. f:debug
          1. Argumente
          2. Beispiel
        9. f:else
        10. f:flashMessages
          1. Argumente
          2. Beispiel
        11. f:for
          1. Argumente
          2. Beispiel
          3. Beispiel
        12. f:form
          1. Argumente
          2. Beispiel
          3. Beispiel
        13. f:form.button
          1. Argumente
        14. f:form.checkbox
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        15. f:form.hidden
          1. Argumente
          2. Beispiel
        16. f:form.password
          1. Argumente
          2. Beispiel
        17. f:form.radio
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        18. f:form.select
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        19. f:form.submit
          1. Argumente
          2. Beispiel
        20. f:form.textarea
          1. Argumente
          2. Beispiel
        21. f:form.textfield (vorher f:form.textbox)
          1. Argumente
          2. Beispiel
        22. f:form.upload
          1. Argumente
          2. Beispiel
        23. f:form.validationResults
          1. Argumente
          2. Beispiel
        24. f:format.bytes
          1. Argumente
          2. Beispiel
        25. f:format.cData
          1. Beispiel
        26. f:format.crop
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
          5. Beispiel
        27. f:format.currency
          1. Argumente
          2. Beispiel
          3. Beispiel
        28. f:format.date
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        29. f:format.html
          1. Argumente
          2. Beispiel
          3. Beispiel
        30. f:format.htmlentitiesDecode
          1. Argumente
          2. Beispiel
        31. f:format.htmlentities und f:format.htmlspecialchars
          1. Argumente
          2. Beispiel
        32. f:format.nl2br
          1. Argumente
          2. Beispiel
        33. f:format.number
          1. Argumente
          2. Beispiel
          3. Beispiel
        34. f:format.padding
          1. Argumente
          2. Beispiel
          3. Beispiel
        35. f:format.printf
          1. Argumente
          2. Beispiel
          3. Beispiel
        36. f:format.raw
        37. f:format.stripTags
          1. Beispiel
        38. f:format.urlencode
          1. Beispiel
        39. f:groupedFor
          1. Argumente
          2. Beispiel
        40. f:if
          1. Argumente
          2. Beispiel
          3. Beispiel
          4. Beispiel
        41. f:image
          1. Argumente
          2. Beispiel
        42. f:layout
          1. Argumente
          2. Beispiel
        43. f:link.action
          1. Argumente
          2. Beispiel
        44. f:link.email
          1. Argumente
          2. Beispiel
        45. f:link.external
          1. Argumente
        46. f:link.page
          1. Argumente
          2. Beispiel
          3. Beispiel
        47. f:uri.action
          1. Argumente
          2. Beispiel
        48. f:uri.email
          1. Argumente
          2. Beispiel
        49. f:uri.external
          1. Argumente
        50. f:uri.page
          1. Argumente
          2. Beispiel
          3. Beispiel
        51. f:uri.resource
          1. Argumente
          2. Beispiel
        52. f:render
          1. Argumente
          2. Beispiel
          3. Beispiel
        53. f:security.ifAuthenticated
          1. Beispiel
        54. f:security.ifHasRole
          1. Argumente
          2. Beispiel
          3. Argumente
          4. Beispiel
        55. f:then
        56. f:translate
          1. Argumente
          2. Beispiel
        57. f:widget.autocomplete
          1. Argumente
          2. Beispiel
        58. f:widget.paginate
          1. Dieser ViewHelper erstellt eine Seitennavigation für eine Liste von Datensätzen.
          2. Argumente
          3. Beispiel
      3. Eigene ViewHelper schreiben
        1. API des AbstractViewHelpers
          1. Eigenschaften
          2. Methoden
        2. API des TagBasedViewHelpers
          1. Eigenschaften
          2. Methoden
        3. API des TagBuilders
          1. Methoden
    2. Boolesche Ausdrücke
  15. D. Über die Autoren
  16. Stichwortverzeichnis
  17. Kolophon
  18. Copyright