Vorwort
- Lesezeichen setzen!
- Patricks Hintergrund
- Michaels Hintergrund
- Danksagung
- Piraterie
Hinweise zur deutschen Ausgabe
1.Die Entstehungsgeschichte von Extbase und Fluid
- 1.1Der Ursprung von TYPO3
- 1.2Das Berlin Manifesto
- 1.3Das neue PHP-Framework
- 1.4Der Tod des Phoenix
- 1.5Die Trennung
- 1.6Extbase und Fluid
2.Grundlagen der PHP Programmierung
- 2.1Objektorientierte Programmierung
- OOP in Extbase und Fluid
- 2.2Klassen und Objekte
- Syntax
- 2.3Methoden
- 2.3.1Der Pfeil-Operator (“Arrow Operator”)
- 2.3.2Der Konstruktor (“Constructor”)
- 2.3.3Zugriff mittels
$this - 2.3.4Funktionen mit Inhalten füllen
- 2.4Vererbung von Klassen
- 2.4.1Zugriff mittels
parent - 2.4.2Überprüfung der Klassenzugehörigkeit
- 2.5Abstrakte Klasse
- 2.6Interfaces
- 2.7Sichtbarkeit:
publicundprotected - Sichtbarkeiten in Extbase und Fluid
- 2.7.1Getter und Setter
- 2.8Type Hints
- 2.9Datentyp-Deklaration für Rückgabewerte
- 2.10Strenge Typisierung (“Strict Types”)
- 2.11Statische Zugriffe
- 2.12Namespaces
- 2.13Wichtige Entwurfs- und Architekturmuster
- 2.13.1Singleton
- 2.13.2Prototype
- 2.13.3Dependency Injection
- 2.14Annotations
- 2.15Programmierstandards
- PSR and PHP FIG
- 2.15.1PSR-1
- 2.15.2PSR-2
- 2.15.3Code-Kommentare
3.Domain-Driven Design
- 3.1Infrastructure Ignorance
- 3.2Vertikale Schichtarchitektur
- 3.3Das Domänenmodell
- 3.3.1Ubiquitous Language
- Pragmatisches Vorgehen
- 3.3.2Bausteine für das DDD
- 3.4Strukturierung von DDD
- 3.4.1Bounded Context
- 3.4.2Context Map
- 3.4.3Core Domain
- 3.4.4Shared Kernel
- 3.4.5Zusammenfassung
4.Vorbereitung
- TYPO3 vorinstalliert
- 4.1Installation von TYPO3
- TYPO3 v10 und höher
- 4.1.1Systemanforderungen
- 4.1.2Installation mit PHP Composer
- 4.1.3Site Package
- 4.1.4Development Application Context
- 4.2Grundlagen von TYPO3-Extensions
- 4.2.1Extension Keys
- 4.2.2TYPO3 Extension Repository (TER)
- 4.2.3TER Extensions und Composer
- 4.2.4Weitere Methoden zur Veröffentlichung
- 4.2.5Extensions, Plugins, Modules und Distributions
- 4.2.6Hinter den Kulissen
- 4.2.7Datei- und Verzeichnisstruktur
- 4.3Entwicklungsumgebung
- 4.4Zusammenfassung
5.Erstellen eines Domänenmodells
- 5.1In diesem Buch verwendetes Domänenmodell
- 5.2Grundkonzept
- 5.2.1Das Glossar
- 5.2.2Domain Model (“Domänenmodell”)
- 5.3Der TYPO3 Extension Builder
- 5.3.1Historie
- 5.3.2So funktioniert der Extension Builder
- 5.3.3Zielgruppe
- 5.3.4Einschränkungen
- 5.3.5Installation
- Extension Builder Version
- 5.3.6Extension Eigenschaften (Properties)
- Folge genau den Anweisungen und Beispielen
- Speichere jetzt deine Änderungen!
- 5.3.7Domain Model
- Die Reihenfolge der Erstellung der Objekte ist relevant
- 5.3.8Die Eigenschaften des Domänenmodells
- Speichere jetzt deine Änderungen!
- 5.3.9Relationen im Domänenmodell
- Speichere jetzt deine Änderungen!
- 5.4Aktivierung der Extension
- 5.5Automatisches Laden von PHP-Klassen (“Autoloading”)
- 5.6Zusammenfassung
6.Analyse der initialen Dateien
- 6.1Vom Extension Builder erstellte Dateien
- 6.1.1Dateien im Ordner
Classes/ - Einheitliche Namensgebung
- 6.1.2Dateien in dem Ordner
Configuration/ - 6.1.3Dateien im Ordner
Resources/ - 6.1.4Dateien im Ordner
Tests/ - 6.1.5Dateien im Stammverzeichnis
- 6.1.6Datei
ext_tables.php - 6.2Zusätzliche Funktionalität des Extension Builders
- 6.2.1Modifizieren des Models
- 6.3TypoScript
constantsundsetup - 6.4Zusammenfassung
7.Der CRUD-Prozess
- 7.1Model-View-Controller in Extbase
- 7.2Erstellen eines Objekts (“Create”)
- 7.2.1Erstellen einer “Action” im Controller
- 7.2.2Erstellen des Templates für die
listAction() - 7.2.3Anmerkung: Template-Rendering
- Rendern von einem View ohne Ausgabe
- 7.2.4Statische Blogs erstellen
- 7.2.5Blogs persistieren (speichern)
- 7.2.6Wie Persistenz funktioniert
- 7.2.7Die manuelle Speicherung durch den PersistenceManager
- 7.2.8Eigene Action erstellen
- 7.2.9Formular zum Anlegen eines Objekts
- Was dich als nächstes erwartet
- 7.3Lesen eines Objekts (“Read”)
- 7.4Aktualisierung eines Objekts (“Update”)
- 7.5Löschen eines Objekts (“Delete”)
- 7.5.1Übung
- Action-Name
deleteConfirm - 7.6Anpassung des visuellen Erscheinungsbildes
- 7.6.1“Font Awesome” Icons
- 7.6.2List View: Button rechts ausrichten
- 7.6.3Button-Abstände
- 7.7Zusammenfassung
8.Fluid Templating
- 8.1Templates, Layouts und Partials
- 8.2Ein globales Layout verwenden
- 8.2.1Mehrfach-Abschnitte (“Sections”)
- 8.2.2Optionale Abschnitte
- 8.3Partials
- 8.3.1Einfache Partials
- Verwendung von Unterverzeichnissen
- 8.3.2Komplexe Partials
- Übergabe von Argumenten an Partials
- 8.4Zusammenfasung
9.Query Manager und Repositories
- 9.1Repository-Klasse
- 9.2Magische Funktionen
- 9.3Standard-Struktur einer Abfrage
- 9.3.1Anmerkung: Debugging
- Nicht für die Öffentlichkeit!
- 9.4Abfragen anpassen
- 9.4.1Ergebnismenge konkretisieren
- 9.4.2Ergebnismenge beeinflussen
- 9.4.3Logische Verknüpfung
- 9.4.4Natives SQL
- 9.4.5Abfrageeinstellungen (Query Settings)
- 9.5Beispiel: Suche nach einem Schlüsselwort im Titel
- 9.6Dynamische Suche im Repository
- Sonderzeichen konvertieren
- 9.7Anmerkung: Das
Request-Objekt - 9.8Zusammenfassung
10.TypoScript und FlexForm Konfiguration
- 10.1TypoScript
- 10.1.1Hauptschlüssel
- 10.1.2Unterschlüssel
- 10.1.3Option:
view - 10.1.4Option:
persistence - 10.1.5Option:
objects - 10.1.6Option:
features - 10.1.7Option:
mvc - 10.1.8Option:
settings - 10.1.9Option:
_LOCAL_LANG - 10.1.10Option:
_CSS_DEFAULT_STYLE - 10.2FlexForms
- 10.2.1FlexForm Konfiguration
- Klicke immer auf “save”
- 10.2.2Zugriff auf die FlexForm-Konfiguration
- 10.2.3Zugreifen auf Konfigurationen außerhalb eines Controllers
- 10.2.4Switchable Controller Actions (SCA)
- Entferne die SCA-Konfiguration, bevor du fortfährst.
- 10.3TypoScript für Backend-Module
- 10.4Anpassungen für die nächsten Kapitel
- 10.5Zusammenfassung
11.Validierung und Fehlerbehandlung
- 11.1Der Punkt, an dem die Validierung stattfindet
- 11.2Fehler anzeigen
- 11.2.1ViewHelper: Validierungsergebnisse
- 11.3Übersicht der Validierungsmöglichkeiten
- 11.4Property-Validierung
- 11.4.1Eingebaute Validatoren
- 11.4.2Mehrere Validatoren
- 11.4.3Eigene Validatoren
- 11.5Objekt-Validierung (Object Validation)
- 11.6Action-Validierung (Action Validation)
- 11.7Validierungen explizit unterbinden
- 11.8Flash-Messages
- 11.8.1Flash-Messages generieren
- 11.8.2Flash-Messages anzeigen
- 11.8.3Flash-Message-Warteschlangen
- 11.8.4Flash-Message-Warteschlangen in einem Controller
- 11.8.5Praktische Übung
- 11.9Zusammenfassung
12.ViewHelper
- 12.1ViewHelper im Allgemeinen
- 12.1.1Namespace
- 12.1.2PHP-Klassendateien
- 12.2ViewHelper im TYPO3 Core
- 12.3ViewHelper von der Community
- 12.4Eigene ViewHelper
- 12.4.1Text-ViewHelper
- 12.4.2TagBased-ViewHelper
- Universelle Tag-Attribute
- 12.4.3Condition-ViewHelper
- 12.4.4Widget-ViewHelper
- Mach deine ViewHelper idiotensicher!
- Performance
- 12.5Überprüfe dein Wissen
- 12.5.1Übung: Der Gravatar ViewHelper
- 12.5.2Übung: Das A-bis-Z Widget
- 12.6Die Methoden
renderStatic()undrender() - 12.7Zusammenfassung
13.Relationen
- 13.1Relationen im Domänenmodell
- 13.2Das “Table Configuration Array” (TCA)
- 13.2.1TCA:
ctrl - 13.2.2TCA:
interface - 13.2.3TCA:
types - 13.2.4TCA:
palettes - 13.2.5TCA:
columns - Validierung synchron halten
- 13.3Der CRUD Prozess von Blog-Beiträgen (“Posts”)
- 13.3.1Vorbereitung
- 13.3.2Beiträge erstellen (“create”)
- 13.3.3Beiträge lesen (“read”)
- 13.3.4Beiträge aktualisieren (“update”)
- 13.3.5Beiträge löschen (“delete”)
- 13.4
m:n-Relationen (Tags) - 13.4.1Erstellen von Tags im Backend
- 13.4.2Tags-Repository
- 13.4.3Tags im
Post-Controller auslesen - 13.4.4Anpassungen von Templates und Partials
- Tags werden automatisch gespeichert
- 13.4.5Tags in der Liste der Beiträge anzeigen
- 13.5
1:1-Relationen (Autoren) - 13.5.1Frontend-Benutzer und -Gruppen
- 13.5.2
Authorzufe_userszuordnen - 13.5.3Implementierung des Frontend-Teils
- 13.5.4Automatische Zuweisung des Frontend-Benutzers
- 13.5.5E-Mail-Adressen verschleiern
- 13.6Kommentare als AJAX-Anfrage
- Aus didaktischen Gründen
- 13.6.1Controller und Action
- 13.6.2Ajax-Controller
- 13.6.3Kommentare anzeigen
- 13.6.4JavaScript
- Fehlerbehandlung
- 13.6.5Der AJAX-Seitentyp in TypoScript
- 13.7Zusammenfassung
14.Labels und Lokalisierung
- 14.1Wozu werden Sprachdateien verwendet?
- 14.2Sprachdateien
- 14.2.1Platzhalter
- 14.2.2Variablen
- 14.2.3Aktualisierung alle Template-Dateien
- 14.3Labels mittels TypoScript überschreiben
- 14.4Sprache-Konfiguration
- 14.4.1Sprache der Website
- 14.4.2Website-Konfiguration
- Veraltete TypoScript-Einstellungen
- 14.4.3Übersetzungen von Seiten
- 14.4.4Übersetzung von Inhaltselementen
- Webserver-Konfiguration
- 14.5Lokalisierte Sprachdatei
- 14.5.1Labels mittels TypoScript überschreiben
- 14.6Sprach-Labels in PHP
- 14.7Lokalisierung von Domänenobjekten
- Kein perfektes Beispiel
- 14.7.1Das “Table Configuration Array” (TCA)
- 14.7.2Dateneinträge übersetzen
- 14.8Zusammenfassung
15.Property Mapper und Type Converter
- 15.1Der Property Mapper
- 15.1.1Type Converter
- 15.1.2Property Mapper Konfiguration
- 15.2Datei-Upload-Funktionalität
- 15.2.1Sicherheitsaspekte
- 15.2.2Blog Controller
- 15.2.3Upload FileReference Converter
- 15.2.4Blog-Domänenmodell
- 15.2.5TCA des Blog-Domänenmodells
- 15.2.6
FileReferenceDomänenmodell - 15.2.7TypoScript
- 15.2.8Partials und Templates
- 15.2.9FormUpload-ViewHelper
- 15.3Testen der Datei-Upload-Funktion
- 15.4Zusammenfassung
16.Backend-Module
- 16.1Anforderungsanalyse und Lösungskonzeption
- 16.2Basiskomponenten
- 16.2.1Registration
- 16.2.2Sprachdatei
- 16.2.3Abstract Backend Controller
- 16.3Die erste Funktion: Liste der Kommentare
- 16.3.1Der
Comment-Controller - 16.3.2Fluid-Templates
- 16.4Die zweite Funktion: das Dashboard
- 16.4.1Modul-Registrierung
- 16.4.2Erweiterung des Menüs
- 16.4.3Der Dashboard-Controller
- 16.4.4Fluid-Templates
- 16.4.5Darstellung der Statistiken
- 16.4.6RequireJS
- 16.4.7AJAX im TYPO3 Backend
- 16.4.8AJAX-Funktionalität zu JavaScript hinzufügen
- 16.4.9Feinabstimmung und zusätzliche Hinweise
- 16.5Die Styleguide Extension
- 16.5.1Installation
- 16.5.2Anwendung
- 16.6Zusammenfassung
17.Aufräumen und Projektabschluss
- 17.1Annotations
- 17.2Der PSR-2 Coding Standard (“PHP CodeSniffer”)
- 17.3DocBlocks (“phpDocumentor”)
- 17.4Dokumentation
- 17.5Zusammenfassung
18.Sicherheitsgrundlagen
- 18.1Das TYPO3 Security Team
- 18.2Sicherheit in TYPO3 Extensions
- 18.3Die häufigste Sicherheitslücken
- 18.3.1OWASP Top 10
- 18.3.2Einschleusen von Schadcode
- 18.3.3Cross-Site Scripting
- 18.3.4Cross-Site Request Forgery
- 18.3.5Fehlende Zugriffskontrolle
- 18.4Weitere typische Sicherheitsrisiken
19.Was kommt als nächstes?
- 19.1Offizielle TYPO3-Zertifizierungen
Anhang
- TYPO3 Versionshistorie
- Extension-Konfigurationsdatei
- Referenzen und weiterführende Literatur
- Inoffizielle Websites
- PHP Sicherheit
- Glossar
- Änderungshistorie