Lektion 2:
Objekt-relationales Mapping Seite 19

1. Frage
Wie viele Klassen repräsentiert normalerweise eine Datenbank-Tabelle, wenn Sie Active Record verwenden?
Nur eine.
2. Frage
Wie viele Objekte erhalten Sie in PHP, wenn Die mit Active Record 30 Datensätze aus der DB auslesen?
30 Objekte, eines für jeden Datensatz.
3. Frage
Wie viele Klassen repräsentieren normalerweise eine Datenbank-Tabelle, wenn Sie Data Mapper verwenden?
Zwei Klassen, eine für die Datenhaltung und eine für die Datenverwaltung (Speichern, Löschen usw.).
4. Frage
Wie viele Objekte erhalten Sie in PHP, wenn Sie mit dem Data Mapper 30 Datensätze aus der DB auslesen?
31! 30 Objekte der Datenklasse und ein Objekt des Mappers.

Lektion 3:
Composer, Packagist & Co. Seite 20

1. Frage
Welche Konsolenkommandos von Composer haben Sie kennengelernt?
  • php composer.phar about
  • php composer.phar self-updat
  • php composer.phar create-project
  • php composer.phar search
  • php composer.phar browse
  • php composer.phar install
2. Frage
Was erspart Ihnen eine __autoload()-Funktion?
Eine solche Funktion erspart hauptsächlich viel Schreibarbeit, indem sie einen Automatismus für die einbindung von Klassen festlegt. Zudem erübrigt sich die vorherige Festlegung der benötigten Klassen, da der Automatismus genau in dem Moment greift, wo die Klasse beispielweise im Rahmen einer Instanziierung benötigt wird.

Lektion 4:
Objekt-relationales Mapping Seite 21

1. Frage
Nennen Sie Beispiele für Namespaces jenseits PHP-Programmierung.
Dateiverzeichnisse, Postleitzahlen und Telefonvorwahlen.
2. Frage
Wir verwenden Annotationen zur Festlegung des Datebank-Schemas. Was ist der primäre Unterschied zu den drei anderen Varianten?
Annotationen erfolgen in Form von Kommentaren direkt in der Klasse. Die restlichen Varianten werden in seperaten Dateien umgesetzt.
3. Frage
Überlegen Sie, ob jedes Attribut Annotationen (z.B. @ORM\Column) benötigt.
Attribute, die nicht von Doctrine in der Datenbank gespeichert werden sollen, benötigen auch keine Annotationen. Solche Attribute sind allerdings vergleichsweise selten.

Lektion 5:
Aufbau einer Datenbank-Verbindung Seite 22

1. Frage
Wie nennt man die Schnittstelle zu Doctrine, die man zum Auslesen, Speichern und Löschen von Datensätzen nutzt?
EntityManager
2. Frage
Es gibt eine Namenskonvention für die Variable, in der das Objekt dieser Schnittstelle liegt. Wie lautet diese?
$em

Lektion 6:
PHP-Objekte mit Doctrine speichern Seite 23

1. Frage
Reicht es, die Methode EntityManager#persist()aufzurufen, um ein Objekt zu speichern?
Nein. Erst wenn man die Methode EntityManager#flush() aufruft, werden alle SQL-Anweisungen ausgeführt, die sich bis zu diesem Zeitpunkt angesammelt haben.
2. Frage
Wie nennt man das Vorgehen, Aufgaben zu sammeln und am Stück abzuarbeiten?
Unit of Work

Lektion 7:
Datenbankabfragen mit Doctrine Seite 56

1. Frage
Was repräsentiert bei Doctrine eine Tabelle mit allen enthaltenen Datensätzen und dient gleichzeitig dazu, Datensätze nach bestimmten Kriterien auszulesen?
Die Tabelle wird durch ihr EntityRepository representiert, welches man mit der Methode EntityManager#getRepository()erhält.
2. Frage
Man legt das EntityRepository selten in einer eigenen Variablen ab, sondern hängt einen weiteren Methodenaufruf an den ersten an. Wie nennt man diese Vorgehensweise?
Man nennt diese Vorgehensweise Chaining und kombiniert sie zur besseren Lesbarkeit oftmals mit manuellen Zeilenumbrüchen, d.h. jeder Methodenaufruf steht in einer eigenen Zeile.

Lektion 8:
Komplexe Abfrage mit Doctrine Seite 69

1. Frage
Wie nennt sich das bei Doctrine verwendete Äquivalent zu SQL und was ist der wichtigste Unterschied zu SQL?
Bei Doctrine verwendet man für Datenbandabfragen DQL (Doctrine Query Language). Der Hauptunterschied besteht darin, dass man mit DQL nicht Tabellen befragt, sondern die Enties
2. Frage
Was verwendet man als Rückgabewert der Methoden, um in einer Klasse ein einfaches Fluent Interface umzusetzen?
$this

Lektion 9:
Die Webmaster Doctrine Extensions Seite 77

1. Frage
Welches konfigurations-Array ist durch das überarbeitete Bootstrapping nun optional?
$applicationOptions
2. Frage
Welches Paket haben wir neben den Webmaster Doctrine Extensions in dieser Lektion noch installiert?
Gedmo Doctrine Extensions

Lektion 10:
DateTime Seite 85

1. Frage
Welche Alternative(n) zu der Unmenge von Datums- und Zeitfunktionen haben Sie in dieser Lektion kennengelernt?
Die Klasse DateTime bzw. Webmasters\Doctrine\ORM\Until\DateTime
2. Frage
Womit kann man automatisiert ein Erstellungs- oder Aktualisierungsdatum in einem Attribut pflegen?
Die automatisierte Datumspflege ist mit der Annotation @Gedmo\Timestampable möglich, die jedoch nicht Doctrine-Standard ist und erst durch die Nutzung des Paketes gedmo/doctrine-extensions zur Verfügung steht.

Lektion 11:
Datenbank-Beziehungen mit Doctrine Seite 105

1. Frage
Wie definiert man Beziehungen zwischen Doctrine-Entities?
Man benötigt in beiden Entities ein neues Attribut und versieht dieses mit Annotationen.
2. Frage
Genauer gefragt, was nutzt man, um eine 1:n-Beziehung abzubilden?
Auf der 1(One)-Seite der Beziehung nutzt man die Annotation @ORM\OneToMany (Attributs-Bezeichner im Plural) und auf der n-Seite benötigt man ein @ORM\ManyToOne (Attributs-Bezeichner im Singular).
3. Frage
Und was nutzt man, um eine n:m-Beziehung abzubilden?
Auf beiden Seiten nutzt man eine @ORM\ManyToMany-Annotation (Attributs-Bezeichner im Plural). Diese unterscheiden sich allerdings beim Bezeichner eines Parameters (mappedBy auf der Gegenseite bzw. inversedBy auf der Eigentümerseite).
4. Frage
Welche Methoden der Klasse ArrayCollection haben Sie kennengelernt?
Sieben Methoden der Klasse ArrayCollection sollten Sie kennen, nähmlich clear, add, contains, removeElement, toArray, isEmpty und count.
5. Frage
Was ist Lazy Loading?
Als Lazy Loading bezeichnet man das Nachladen von Daten bei Bedarf. Bei Doctrine wird dies durch die Nutzung sogenannter Proxy-Klassen ermöglicht

Lektion 12:
Controller-Klassen im Überblick Seite 120

1. Frage
Wofür steht das Akronym CRUD?
Das Acronym steht für die Datenbankoperationen Create, Read, Update und Delete.
2. Frage
Wofür steht das Akronym BREAD?
Das Acronym steht für die Datenbankoperationen Browser, Read, Edit, Add und Delete.
3. Frage
Weswegen beschreibt BREAD die Benutzeroberfläche einer MVC-Anwendung besser als CRUD?
BREAD berücksichtigt den Code-Unterschied bei der Anzeige eines bzw. mehrerer Datensätze und trennt deswegen Read und Browse in zwei verschiedene Operationen.
4. Frage
Wodurch unterschieden sich die Operationen Read, Edit und Delete von den (eher allgemeinen) Operationen Browse und Add?
Read, Edit und Delete benötigen zur Ausführung die ID eines Datensatzes.

Lektion 13:
Fortschrittene Techniken Seite 134

1. Frage
Im welcher Datei kann klassenbasierter Validierungscode für unser User-Entity abgelegt werden und wo wird diese Datei gespeichert?
Entsprechender Code sollte in src/Validators/UserValidator.php abgelegt werden, sofern man die Webmasters Doctrine Extensions verwenden möchte.
2. Frage
Wozu werden eigene Repository-Klasssen benutzt?
In benutzerdefinierten Repository-Klassen können (umfangreichere) Datenbankabfragen ausgelagert werden, wie sie beispielsweise bei der Nutzung des QueryBuilders und JOINs auftreten. Bei einem gut gewähleten, Methodennamen verbessert sich so auch die Lesbarkeit des Controller-Codes und es wird einde Wiederverwendbarkeit der entsprechenden Datenbankabfrage ermöglicht.

Lektion 14:
Eine Einführung in das Thema Sicherheit Seite 185

1. Frage
Welche Daten eines Benutzers sind sicher?
Daten, die garn nicht erst erhoben und gespeichert werden.
2. Frage
Ist eine absolute Risiko-Eliminierung bei einer Web-Anwendung möglich?
Theoretisch ja, praktisch nein. Man spricht deshalb lediglich von einem Risiko-Management.
3. Frage
Welche fünf Tugenden sollte sich ein sicherheitsbewusster Entwickler angewöhnen?
  • Nichts ist zu 100 Prozent sicher.
  • Traue niemals den Benutzer
  • Benutze immer mehrere Verteidigungsliniern.
  • Wartbare Code kann man besser schützen.
  • Vier Augen sehen mehr als zwei.
4. Frage
Unter welcher Prämisse sollte man heutezutage Anwendungen entwickeln?
Der Feind kennt das System
5. Frage
Wieso ist eine Whitelist-Ansatz einer Blacklist meist überlegen?
Bei einer Blacklist benötigt man eine genaue Kenntniss der nicht erlaubten Angaben, bei einer Whitelist hingegen schaltet man selektiv nach und nach die erlaubten (und getesteten) Werte frei.
6. Frage
Was ist die primäre Maßnahme zum Schutz einer Anwendung gegen SQL-Injections?
Prepared Statementsmit (benannten) Platzhalternfür alle Benutzerteingaben sind der wichtigste Schutz. Ihre Nutzung ist jedoch nur möglich, sofern die Wingabe als Wer (und z.B. nicht alsSpalte bzw. Attribut) im SQL-DQL-Statement benötigt wird.
7. Frage
Was ist der Unterschied zwischen persistentem und reflektiertem Cross-Site-Scripting?
Beim persistenten XSS erfolgt der Angriff auf den Benutzer bei einem normalen Aufruf der Website. Der Schadcode idt dauerhaft in die Website intaegriert. Beim reflektierten XSS muss die Website hingegen auf eine spezielle Art und Weise aufgerufen werden (meist über einen präparierten Link). Der Schadcode gelangt erst über diesen Aufruf in die Ausgabe der Wbsite.
8. Frage
Welche Möglichkeiten hat ein Angreifer, um an das Kennwort eines Benutzers zu gelangen? Gehen Sie in diesem Fall von einer Anwendung ohne gravierende Sicherheitslücke aus.
Wörterbuchangriff, Brute-Force-Methide oder einfach eine Tafel Schokolade.
9. Frage
Was idt der wichtigste Unterschied zwischen Verschlüsselung und Hashing?
Bei einem Einweg-Hash-Algorithmus ist im Gegensatz zu einer Verschlüsselung der Vorgang nicht umkehrbar.
10. Frage
Reicht HTTPS als alleinige Verteidigungslinie für eine Webanwaendung aus?
Nein, HTTPS schützt lediglich die Übertragung der Daten. Diese Daten können aber immer noch Schadcode enthalten.