Inhaltsverzeichnis
1
Einführung
1.1
Einleitung
1.2
Vorkenntnisse
1.3
Aufbau der Lektionen
1.3.1
Aufgaben im Fließtext
1.3.2
»Testen Sie Ihr Wissen«
1.3.3
»Aufgaben zur Selbstkontrolle«
1.3.4
Optionale Aufgaben
1.4
Anforderungen an PHP
2
Objekt-relationales Mapping
2.1
Das Problem
2.2
Verbreitete ORM-Entwurfsmuster
2.2.1
Active Record
2.2.2
Data Mapper
2.3
Zusammenfassung
2.4
Testen Sie Ihr Wissen
3
Composer, Packagist & Co.
3.1
Einleitung
3.2
Composer-Einführung
3.2.1
composer.phar
3.2.2
Die Projekt-Struktur
3.3
Composer & Packagist
3.3.1
composer.json
3.3.2
Packagist
3.3.3
Die eigentliche Installation
3.4
Wichtige Composer-Dateien
3.4.1
composer.lock
3.4.2
autoload_namespaces.php
3.5
Zusammenfassung
3.6
Testen Sie Ihr Wissen
4
Doctrine-Entities
4.1
Einleitung
4.2
Die Beispiel-Datenbank
4.2.1
Die Datenklasse Tag
4.2.2
Namespaces
4.3
Konfiguration per Annotationen
4.3.1
Entity
4.3.2
Table
4.4
Der Primärschlüssel
4.4.1
Id
4.4.2
GeneratedValue
4.4.3
Column
4.5
Doctrine-Datentypen
4.6
Parameter von Column
4.6.1
type
4.6.2
length
4.6.3
unique
4.6.4
nullable
4.6.5
precision und scale
4.7
Konfiguration des Autoloaders
4.8
Zusammenfassung
4.9
Testen Sie Ihr Wissen
4.10
Aufgaben zur Selbstkontrolle
5
Aufbau einer Datenbank-Verbindung
5.1
Einleitung
5.2
Bootstrapping
5.2.1
$applicationOptions
5.2.2
EntityManager
5.3
Testen Sie Ihr Wissen
6
PHP-Objekte mit Doctrine speichern
6.1
Einleitung
6.2
Das SchemaTool
6.3
Das Controller-Skeleton
6.4
Das eigentliche Speichern
6.4.1
persist
6.4.2
flush oder das Entwurfsmuster Unit of Work
6.5
Zusammenfassung
6.6
Testen Sie Ihr Wissen
6.7
Aufgaben zur Selbstkontrolle
6.8
Optionale Aufgaben
7
Datenbankabfragen mit Doctrine
7.1
Einleitung
7.2
EntityRepository
7.2.1
Chaining
7.2.2
findAll
7.2.3
find
7.2.4
findBy
7.2.5
findOneBy
7.3
Zusammenfassung
7.4
Testen Sie Ihr Wissen
7.5
Aufgaben zur Selbstkontrolle
8
Komplexe Abfragen mit Doctrine
8.1
Einleitung
8.2
Per DQL
8.2.1
createQuery
8.2.2
getResult
8.2.3
getSingleResult
8.2.4
getOneOrNullResult
8.3
Per QueryBuilder
8.3.1
createQueryBuilder
8.3.2
Die wichtigsten Methoden
8.4
Fluent Interfaces
8.5
Zusammenfassung
8.6
Testen Sie Ihr Wissen
8.7
Aufgaben zur Selbstkontrolle
9
Die Webmasters Doctrine Extensions
9.1
Einleitung
9.2
Doctrine Extensions
9.3
Bootstrapping
9.3.1
Pflichtangaben
9.3.2
Vererbung
9.4
ArrayMapper
9.5
Zusammenfassung
9.6
Testen Sie Ihr Wissen
9.7
Aufgaben zur Selbstkontrolle
10
DateTime
10.1
Einleitung
10.2
Die DateTime-Klasse
10.2.1
format
10.2.2
modify
10.2.3
diff
10.3
Timestampable
10.4
Doctrine und die Nutzung von DateTime-Objekten
10.5
Zusammenfassung
10.6
Testen Sie Ihr Wissen
10.7
Aufgaben zur Selbstkontrolle
10.8
Optionale Aufgaben
11
Datenbank-Beziehungen mit Doctrine
11.1
Das Problem
11.2
Beziehungen per Annotation definieren
11.3
1:n-Beziehungen abbilden
11.3.1
Klasse User
11.3.2
Klasse Article
11.3.3
Das Problem
11.3.4
Die Handhabung von 1:n-Beziehungen
11.3.5
Ein Beispiel
11.4
n:m-Beziehungen abbilden
11.4.1
Klasse Article und Klasse Tag
11.4.2
Die Zwischentabelle
11.4.3
Ein Beispiel
11.5
Lazy Loading
11.6
JOINs
11.6.1
Per DQL
11.6.2
Per QueryBuilder
11.7
Debugging-Probleme
11.8
Zusammenfassung
11.9
Testen Sie Ihr Wissen
11.10
Aufgaben zur Selbstkontrolle
11.11
Optionale Aufgaben
12
Controller-Klassen im Überblick
12.1
Einleitung
12.2
Flash-Notices
12.3
BREAD
12.3.1
Browse
12.3.2
Read
12.3.3
Edit
12.3.4
Add
12.3.5
Delete
12.4
Tagging
12.5
Zusammenfassung
12.6
Testen Sie Ihr Wissen
12.7
Aufgaben zur Selbstkontrolle
12.8
Optionale Aufgaben
13
Fortgeschrittene Techniken
13.1
Doctrine um Validierungen erweitern
13.1.1
Validierungsbedingungen für Datumswerte
13.1.2
Öffentliche Methoden von EntityValidator
13.2
Datenbankabfragen in Repositories auslagern
13.3
Zufallsdatensätze
13.4
Testen Sie Ihr Wissen
13.5
Aufgaben zur Selbstkontrolle
13.6
Optionale Aufgaben
14
Eine Einführung in das Thema Sicherheit
14.1
Absolute Sicherheit ist unmöglich
14.2
Fünf empfehlenswerte Tugenden
14.3
Security through Obscurity
14.3.1
www.webmasters-fernakademie.de
14.3.2
blog-das-oertchen.de
14.3.3
www.google.de
14.3.4
localhost
14.3.5
Server-Konfiguration
14.4
Parametermanipulation
14.4.1
Whitelist - Variante 1
14.4.2
Whitelist - Variante 2
14.4.3
Dateiangaben als Parameter
14.5
Die bekanntesten Angriffsvarianten
14.5.1
SQL-Injections
14.5.2
Cross-Site-Scripting
14.5.3
Weitere Angriffsmöglichkeiten
14.6
Authentisierungssicherheit
14.6.1
Passwörter
14.6.2
Passworthashing
14.6.3
Benutzernamen und Kennungen
14.6.4
Browserfeatures
14.7
Benutzereingaben
14.8
Ein paar grundsätzliche Hinweise
14.8.1
Eval is Evil
14.8.2
Datenminimierung
14.8.3
HTTPS ist kein Allheilmittel
14.9
Letzte Worte
14.10
Testen Sie Ihr Wissen
14.11
Aufgaben zur Selbstkontrolle
14.12
Optionale Aufgaben
15
Anhang: Weiterführende Informationen
15.1
Einführung
15.2
Weblinks
15.2.1
www.php.net
15.2.2
www.phpdeveloper.org
15.2.3
devzone.zend.com
15.3
Buchtipps
Lösungen der Wissensfragen