Sie sind auf Seite 1von 29

TYPO3 CMS Certified Developer

Vorbereitung auf die Prüfung der TYPO3 Association (1.


Auflage)

Patrick Lobacher
Dieses Buch wird verkauft, unter http://leanpub.com/typo3certifieddeveloper

Diese Version wurde veröffentlicht am 2016-08-18

Das ist ein Leanpub-Buch. Leanpub bietet Autoren und Verlagen mit Hilfe des
Lean-Publishing-Prozesses ganz neue Möglichkeiten des Publizierens. Lean Publishing bedeutet
die permanente, iterative Veröffentlichung neuer Beta-Versionen eines E-Books unter der
Zuhilfenahme schlanker Werkzeuge. Das Feedback der Erstleser hilft dem Autor bei der
Finalisierung und der anschließenden Vermarktung des Buches. Lean Publishing unterstützt den
Autor darin ein Buch zu schreiben, das auch gelesen wird.

© 2016 Patrick Lobacher


Ebenfalls von diesen Autoren
Bücher von Patrick Lobacher
TYPO3 Extbase (Deutsch)
TYPO3 Extbase (English)

Bücher von Michael Schams


TYPO3 Extbase (English)
TYPO3 Extbase (Deutsch)
Inhaltsverzeichnis

1. Vorbemerkung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Danksagung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2. Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1 Bewertung der Qualität von TYPO3-Dienstleistungen . . . . . . . . . . . . . . . 5
2.2 TYPO3 CMS Certified Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Die Zertifizierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Zur Benutzung dieses Buches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3. Errors & Validations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18


3.1 Wie kann man auf ein nicht-valides Domänenobjekt $blog in einer Action new
zugreifen? (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Kann man auf Validierungsfehler des Objekts $blog im Controller zugreifen? (1) . 20
3.3 Welche Validation Annotations sind prinzipiell gültig? (3) . . . . . . . . . . . . . 21
3.4 Von welcher Validator-Klasse leiten alle Default-Validatoren ab? (1) . . . . . . . . 22
3.5 Was (wenn überhaupt) wird benötigt, um Optionen in einem Validator zu
verwenden - z.B. Pluswerk.Simpleblog:Word(max=3)? (1) . . . . . . . . . . . . . 23
3.6 Welche Auswirkung hat eine Methode errorAction() im Controller? (1) . . . . . 24
3.7 Ist es möglich, Objekte manuell zu validieren? (1) . . . . . . . . . . . . . . . . . . 25
1. Vorbemerkung
“Release early, release often” ist das Konzept von Leanpub, welches ich mit diesem Buch erstmals
ausprobieren will.
Ich habe mich entschieden, dass Buch mit einem Fertigstellungsgrad von ca. 50% erstmalig zu
veröffentlichen. Darin enthalten sind mindestens 75 Fragen und damit ein kompletter Satz, der für
eine Demo-Prüfung verwendet werden kann. In den nächsten Wochen folgen dann noch 75 weitere
Fragen, sodaß das Buch am Ende 150 Fragen beinhalten wird.
Zudem werden in dieser Phase sicher noch einige Fehler enthalten sein - übt bitte Nachsicht mit mir
- diese versuche ich im Laufe der Zeit natürlich zu tilgen.
Sobald ich weitere Fragen eingepflegt habe, wird der Käufer eine Email erhalten und kann sich den
neuen Stand des Buches selbstverständlich kostenlos herunterladen können - gemäß dem Namen des
Publishers “Lean Pub(lishing)”. Zukünftige Updates werden natürlich ebenfalls kostenfrei bleiben.
Grundsätzlich spreche ich in diesem Buch Leserinnen und Leser gleichermaßen an - habe mich aber
im Text für die männliche Form (z.B. der Leser, der Entwickler, der Integrator) der Worte entschieden,
sobald diese geläufiger sind und für die neutrale Version, sofern es eine gebräuchliche gibt.
Besonders freue ich mich natürlich auch über Feedback von Dir in dieser Phase - denn das hilft
der Qualität des Buches natürlich ungemein und davon profitierst am Ende wieder Du selbst. Also
einfach an patrick@lobacher.de schreiben.
Sobald das Buch vollständig ist, wird es natürlich auch eine Print-Ausgabe drüben bei Amazon
geben.
Ob es allerdings eine Übersetzung ins Englische geben wird, steht noch in den Sternen…
Patrick Lobacher München, 10.06.2016
Vorbemerkung 2

1.1 Danksagung
Ich danke vor allem Dir - meine Leserschaft! Denn ohne Dich, Deine Fragen und Dein Feedback
hätte ich nicht die Motiviation, weiterhin Bücher über TYPO3 zu schreiben. Es macht mir wirklich
sehr viel Spaß und ich freue mich außerordentlich darüber, wenn ich Dir damit zu mehr Wissen
verhelfen und grundsätzlich zur weiteren Verbreitung von TYPO3 beitragen kann.
Patrick Lobacher München, August 2016
Vorbemerkung 3

1.2 Changelog
Version 1.0.0 vom 18.08.2016
Datum Version Änderungen
18.08.2016 1.0.0 15 neue Fragen und einige Korrekturen - damit sind alle Fragen (150) enthalten
26.07.2016 0.7.0 10 neue Fragen und einige Korrekturen
13.07.2016 0.6.0 15 neue Fragen und einige Korrekturen
07.07.2016 0.5.0 10 neue Fragen und einige Korrekturen
05.07.2016 0.4.0 Wir haben die 100 erreicht! - 5 neue Fragen
04.07.2016 0.3.0 Weitere Korrekturen und wieder 5 neue Fragen
20.06.2016 0.2.0 Viele Korrekturen und wieder 5 neue Fragen
16.06.2016 0.1.0 Viele Korrekturen und 5 neue Fragen
10.06.2016 0.0.1 Initiale Version mit ca. 50% Fertigstellung

Vielen Dank geht an: Eric Otto, Claudia Nölker, Oliver Klee, Daniel Tondera, Michael Oehlhof,
Alexander Grein, Michael Schams, …
2. Einführung
TYPO3 wurde 1997 von dem dänischen Entwickler Kasper Skårhøj der Öffentlichkeit vorgestellt
und erlebt seitdem einen anhaltenden Boom. Längst schon ist das Open-Source Enterprise-Content-
Management-System zum Marktführer in seinem Bereich aufgestiegen, und immer mehr Websites
von ganz unterschiedlichem Umfang werden weltweit damit realisiert.
Dabei setzen nicht nur Mittelständler auf das System, sondern vor allem auch immer mehr
Global-Player mit komplexen Webauftritten, darunter Firmen wie Philips, Lufthansa, Aida, Rewe,
Volkswagen, ThyssenKrupp AG, Sixt, Cisco WebEx, Epson, Konica Minolta, General Electric und
viele andere.
Der stetig wachsende Erfolg und das damit verbundene Medienecho führten zu immer mehr
Publikationen über TYPO3, die es mithin ermöglichen, die Arbeit mit dem System von Grund auf
zu erlernen. Solange TYPO3 im privaten oder halbprivaten Bereich genutzt wird, ist der Einsatz
unkritisch; fehlendes Wissen kann man sich hier mit der Zeit aneignen, eine andere Lösung wählen
oder im Notfall die Lösungsversuche aufgeben und auf das Feature oder die Anpassung ganz
verzichten.
Sobald man allerdings mit der Erstellung von TYPO3-Webseiten sein Geld verdienen möchte, neh-
men die Anforderungen zu. Die Lektüre von ein, zwei Fachbüchern genügt da kaum; allzu oft fehlen
dann tiefere Einblicke in das System und Praxiserfahrung. Kunden haben natürlich ganz eigene
Vorstellungen von ihrer Website und deren Funktionalitäten, die sich selten in schablonenhafter
Umsetzung gängiger Vorlagen realisieren lassen. Nur wenn der TYPO3-Dienstleister die notwendige
Expertise hat, kann ein Projekt zur allseitigen Zufriedenheit gelingen.
Für den professionellen Bereich tut also eine objektive Kenngröße, ein Urteil über die Qualität
von TYPO3-Dienstleistern Not, das es potenziellen Kunden möglich macht einzuschätzen, ob der
Dienstleister in der Lage sein wird, einen Auftrag “State of the Art” durchzuführen, eventuell
auftretende Probleme in den Griff zu bekommen, Zusatz- oder Sonderwünsche rasch umzusetzen —
kurz: ob er in der Lage sein wird, das Projekt zügig und zuverlässig zum Erfolg zu bringen.
Einführung 5

2.1 Bewertung der Qualität von


TYPO3-Dienstleistungen
Die (möglichst) objektive Bewertung der Qualität von TYPO3-Dienstleistungen wirft allerdings eine
Reihe von Problemen auf, u.a. wenn man sich auf Selbstauskünfte der Dienstleister verlässt.

2.1.1 Fehleinschätzung der eigenen Fähigkeiten


Der Dienstleister neigt verständlicherweise dazu, sein Wissen eher zu überschätzen, schließlich
wirbt er um Kunden. Stößt er im weiteren Projektverlauf auf Probleme, die bei seinen “Selbst-
versuchen” nicht aufgetreten sind, mangelt es ihm am nötigen Fachwissen, diese zu lösen. Doch
selbst wenn es zunächst keine offenkundigen Probleme gibt, sind die von Unerfahrenen eingesetzten
Methoden und Lösungen oft zu bemängeln: Es wird geflickt und getrickst, nur um das gewünschte
Ergebnis präsentieren zu können.
Dabei muss es sich natürlich nicht unbedingt um Vorsatz handeln — oft fehlen schlicht Wissen
und Erfahrung, um potenzielle Fehler, die erst unter gewissen Bedingungen zum Tragen kommen,
zu erkennen oder z.B. mangelhafte Erweiterbarkeit vorherzusehen. Dann mag die Website zwar
auf den ersten Blick funktionieren, ist aber vielleicht zu langsam, schlecht wartbar oder birgt
Sicherheitsrisiken.
Dem Autor des vorliegenden Buches beispielsweise werden beinahe wöchentlich Projekte ange-
tragen, die ein anderer Dienstleister “in den Sand gesetzt” hat. Schätzt man die eigenen Fähigkeiten
nämlich falsch ein oder pokert zu hoch, weil man den Auftrag braucht, übersieht man im Vorfeld die
Komplexität von Projekten. Dann kommt unweigerlich der Zeitpunkt, an dem das eigene Fachwissen
nicht mehr ausreicht, muss man sich in kurzer Zeit Spezialkenntnisse aneignen oder den Support
durch die Community bemühen. Beides führt selten und nur bedingt zu professionellen Lösungen,
und im schlimmsten Fall stellt man — viel zu spät — fest, dass man dem Projekt nicht gewachsen
ist.
Eine Einschätzung der eigenen Fähigkeiten, im Sinne einer normativen Einordnung, wie sie durch
eine Zertifizierung erfolgt, dient also u.a. auch der eigenen Standortbestimmung (und natürlich dem
Nachweis hierüber).

2.1.2 Qualität von Referenzen


Ein gängiges Kriterium, nach dem Kunden ihren Dienstleister in der Praxis bewerten, sind dessen
Referenzen. Bei näherer Betrachtung sind diese aber nur bedingt aussagekräftig: Der Kunde kann
“von außen” gar nicht einschätzen, in welcher Qualität der Auftritt realisiert wurde; so kann es, um
nur ein Beispiel zu nennen, praktisch unmöglich sein, neue Menüpunkte hinzuzufügen, wenn der
Dienstleister die Möglichkeiten von TYPO3 nicht genutzt und das Menü hartkodiert hat. Der Kunde
kann also meist nur Design und Qualität des Quellcodes (sofern er Erfahrung damit hat) bewerten,
Einführung 6

eventuell noch die Funktionalität — über die TYPO3-Kenntnisse des Dienstleisters erhält er aber
tatsächlich keine verlässlichen Hinweise.
Eine Zertifizierung ist hier ein objektives Kriterium, das, von der TYPO3 Association als berufener
Stelle vergeben, Bewertung über das bloße Betrachten von Referenzen (also Websites) hinaus
ermöglicht.

2.1.3 Profitabilität
Neben der funktionellen Qualität eines Projekts muss man allerdings ein weiteres Kriterium
betrachten, wenn es um die Kompetenz von Dienstleistern geht: Auch in TYPO3 ist es möglich,
definierte Ergebnisse auf verschiedenen Wegen zu erreichen. Es gibt Ansätze, die ein schnelles
Arbeiten ermöglichen und Code und Struktur hinterlassen, die gut zu pflegen sind. Das erfordert
jedoch viel Wissen und Erfahrung, ohne die dieselbe Aufgabe deutlich mehr Arbeitszeit in Anspruch
nimmt. Damit steigen für den Kunden unter Umständen die Kosten; bei Projekten mit einem
vereinbarten Honorarfixum sinkt hingegen der Stundenlohn des Dienstleisters, was den Kunden
zunächst nicht betrifft.
Geht es aber um Wartbarkeit und schnelle Reaktion bei weiteren Anfragen, muss man sich als Kunde
sicher sein, dass der Anbieter nicht nur die ursprüngliche Projektvariante beherrscht, sondern auch
auf neue Fragestellungen zu reagieren in der Lage ist und dass er zudem das Projekt stets in einem
Zustand hält, der Wartung, Erweiterung oder gar Übernahme durch andere erlaubt; gerade dies
erfordert Erfahrung, die unter dem Stichwort “best practice” Standards zusammenfasst, die technisch
nicht zwingend sind, sich jedoch als gut und sinnvoll bewährt haben.
Die Zertifizierung zum “TYPO3 CMS Certified Developer” ist darum, wie viele Zertifizierungen im
IT-Bereich, darauf angelegt, nicht nur Wissen, sondern auch Erfahrung zu erfassen (wenn dies auch
ein psychometrisch schwieriges Unterfangen ist).

2.1.4 TYPO3-Zertifizierung als Qualitätsmaßstab


Zur Lösung der oben genannten Probleme wurde eine Reihe von Zertifizierungen ins Leben gerufen:

TYPO3 CMS Certified Integrator (TCCI)


Diese ist bereits seit vielen Jahren aktiv und war lange Zeit die einzige Zertifizierung für
TYPO3. Thema war weitestgehend die Integration von Webseiten mit Hilfe von TypoScript.

TYPO3 CMS Certified Developer (TCCD)


Mit dem Start dieser Zertifizierung Anfang 2016 wurde endlich eine Lücke geschlossen, denn
der TYPO3 CMS Certified Integrator reicht bei weitem nicht mehr aus, um professionelle
Webseiten und Portale zu erstellen, da dort immer auch Eigenprogrammierung zum Einsatz
kommen. Alles rund um die Architektur und die Programmierung des Systems ist Kerninhalt
dieser Zertifizierung.
Einführung 7

TYPO3 CMS Certified Editor (TCCE)


Es gab und gibt eine hohe Nachfrage von Anwendern des Systems, sich ebenfalls zertifizieren
zu lassen. Hier ist der Fokus als eher der Kunde als der Dienstleister. In dieser Zertifizierung
geht es darum zu zeigen, dass man das System beherrscht und die zugrundeliegenden
Konzepte versteht. Die Zertifizierung wurde im Q2 / 2016 gestartet.

TYPO3 CMS Certified Consultant (TCCC)


Bevor eine Website oder ein Portal erstellt werden kann, muss es zunächst geplant werden.
Oftmals kommt der Kunde mit Wünschen zum Dienstleister und dieser bewertet die Wünsche
und erstellt mit dem Kunden ein Basis-Konzept, welches anschließend umgesetzt wird. Diese
Zertifizierung greift genau hier in den Beratungsprozess ein: Versteht der Dienstleister die
Komplexität des Anliegens und kann er die Wünsche entsprechend auf die Fähigkeiten
von TYPO3 mappen? Versteht er die Basiszusammenhänge im System und kann daraufhin
entsprechend beraten? Hat er Projektmethodiken und Aufwände im Griff? Die Zertifizierung
wird voraussichtlich im Q4 / 2016 starten.

Die Prüfungen erfassen Wissen und Erfahrung des Dienstleisters möglichst umfassend und ermitteln
ein objektives Urteil darüber, ob der Prüfungsteilnehmer in der Lage ist, ein TYPO3-Kundenprojekt
nach festgelegten Bedingungen professionell und qualitativ hochwertig durchzuführen. Der Kunde
soll sich auf diese Kenngröße verlassen können — auch und gerade wenn er über keinerlei TYPO3-
Kenntnisse verfügt.
Zusammenfassend kann man also sagen, dass die TYPO3-Zertifizierung helfen, die Qualität der
TYPO3-Dienstleistungen zu verbessern, weil professionelle Anbieter sich von weniger versierten
abgrenzen können und Kunden ein objektives Kriterium an die Hand bekommen, um zu erkennen,
wer sein Handwerk versteht.
Einführung 8

2.2 TYPO3 CMS Certified Developer


Der Kickoff zum TYPO3 CMS Certified Developer fand im Februar 2015 unter Beteiligung einiger
sehr erfahrenen TYPO3 Entwickler (inkl. dem Autor) in München statt.
Zuerst hatten wir die Definition der Zertifizierung gearbeitet:

A TYPO3 CMS Certified Developer has to have experience collected through projects, should know
the architecture, design patterns, best practices, and a fair share of internals both TYPO3 CMS and
the extension framework relies on. He/She is able to implement an extension completely in a state-
of-the-art way and writes clean code by following the TYPO3 Coding Guidelines (CGL), and is well
versed in a wide range of topics, from the initial setup of an extension up to the point of publishing
it in the TYPO3 Extension Repository (TER).

Übersetzt demnach:

Ein TYPO3 CMS Certified Developer muss über Projekterfahrung verfügen, kennt die Architektur,
Design Patterns, Best Pratices und einen guten Überblick über die Internals von TYPO3 und dem
zugrundeliegenden Extension Framework. Er/Sie ist ist der Lage eine Extension eigenständig und
state-of-the-art zu entwickeln, schreibt sauberen Code, der den TYPO3 Coding Guidelines (CGL)
folgt und ist gut versiert in einer großen Breite an weiteren Themen, beginnend beim initialen
Setup einer Extension bis hin zur Publizierung im TYPO3 Extension Repository (TER).

2.2.1 Objectives
Um nun die Prüfungsthemen näher zu spezifizieren, wurden vom Zertifizierungsteam sogenannte
“Objectives”, also Lernziele, definiert. Das vorliegende Buch orientiert sich mit seinen Fragenberei-
chen sehr genau an diesen Objectives, was sich auch in der Kapitelstruktur widerspiegelt:

Architecture
Grundlagen der Architektur des TYPO3-CMS-Kerns

TYPO3 Internals (FlexForms, TCA, i18n)


Interne Konzepte, wie TypoScript, Flexforms, Table Configuration Array, Internationalization,
u.s.w.

Fluid
Alles rund um die Templating-Engine “Fluid”
Einführung 9

TypoScript
TypoScript im Zusammenspiel mit der Extension-Entwicklung

Security
Sicherheitsrelevante Sachverhalte

Errors and Validations


Fehlerhandling und Validierung

Caching
Fragen rund um das Caching

Repositories and Query Manager


Fragen über das Repository und seine Methoden, sowie den Query Manager

Documentation
Alle Fragen rund um die Dokumentation

Miscellaneous
Verschiedene Themen, die nicht in die obigen Bereiche passen

Das Buch deckt die gegebenen Objectives in Sachen Umfang etwa in derselben Gewichtung ab, wie
sie für die Prüfung gelten.
Einführung 10

2.3 Die Zertifizierung


Die Zertifizierung wurde von der TYPO3 Association ins Leben gerufen. Das dafür eigens gegründe-
te TYPO3-Zertizierungsteam besteht aus namhaften Experten im Bereich Zertifizierung und TYPO3.
Der Autor selbst ist ebenfalls Mitglied. Das Team ist für den Entwurf, die Durchführung und die
ständige Verbesserung der Zertifizierung zuständig.

2.3.1 Allgemeines zur Prüfung


Die Prüfung wird grundsätzlich und ausschließlich in englischer Sprache durchgeführt. Dabei
arbeitet TYPO3 mit dem Anbieter “Pearson VUE” zusammen, der in seinen weltweit über 3.700
Testcentern in 145 Ländern eine elektronische Prüfung ermöglicht. Die Fragen wurden von TYPO3-
Experten (darunter einige Core-Entwickler) entwickelt und nach strengen Richtlinien überarbeitet.
Ein weiteres Expertengremium ist für die Evaluation der Fragen zuständig, um hohe Qualität
sicherzustellen und zu ermitteln, in welcher Gewichtung (korrespondierend mit der Lösungswahr-
scheinlichkeit) die jeweilige Frage in die Prüfung eingehen soll.
Man kann die Prüfung - falls man nicht besteht - beliebig oft wiederholen; allerdings müssen zwi-
schen dem nicht bestandenen und dem neuen Prüfungstermin mindestens zwei Monate liegen. Lies,
bevor Du Dich anmeldest, die Frequently Asked Questions (FAQ) durch, die auf der Certification-
Website zu finden sind.

2.3.2 Anmeldung
Normalerweise kostet die Prüfung 200,- EUR. Wenn Du selbst (oder Deine Firma) Mitglied der
TYPO3 Association sind, erhaltet Ihr 50,- EUR Rabatt. Damit man diesen Nachlass bei der Anmel-
dung auch gutgeschrieben bekommt, muss man zunächst eine E-Mail an certification@typo3.org
schicken, in der man seine Mitgliedsnummer und den Namen des Prüflings mitteilt. Anschließend
erhält man einen Gutschein-Code.
Ist die Firma, in der man arbeitet, Association-Mitglied mit dem Status Silber oder höher, erhält sie
eine definierte Anzahl von Gutscheinen, mit denen sich die Prüfung um 50,- EUR reduziert:

• Silber: 3 Gutscheine pro Jahr


• Gold: 10 Gutscheine pro Jahr
• Platin: 20 Gutscheine pro Jahr

Zuerst geht man auf die Pearson-VUE-Website¹ und wählt dort den Menüpunkt “For test takers”
aus:
¹https://www.pearsonvue.co.uk/test-taker.aspx
Einführung 11

For test takers

In das Eingabefeld gibt man nun “TYPO3” ein und wählt damit die TYPO3-PearsonVUE Homepage
aus.
Einführung 12

TYPO3 Certification Testing

Hier loggt man sich als nächstes über “Sign in” ein (wenn man schon einen Account haben sollte)
oder registriert sich über “Create account”.
Dazu lässt man die “Candidate ID” leer (bzw. wählt “No, I do not know my Candidate ID”) und trägt
seinen Namen und die Email-Adresse.
Einführung 13

Registrierung Schritt 1

Im nächsten Schritt werden die persönlichen Daten angefragt.

Registrierung Schritt 2

Die Anmeldung wird nun offensichtlich persönlich geprüft - denn es erfolgt eine Meldung, dass man
Einführung 14

Login und Passwort innerhalb eines Geschäftstages erhält.

TODO: Prozess aktualisieren sobald verfügbar!

Nun geht es weiter auf der rechten Seite mit dem Menüpunkt “Find a test centre”. In die Suchmaske
gibt man due gewünschte Stadt (oder Land) ein.
Denkt daran, dass Du die Prüfung bei Nichterscheinen - sofern Du dies nicht mindestens 48 Stunden
vorher über die Website anmeldest - auch bezahlen musst.

2.3.3 Ablauf der Prüfung


Am besten ist es, wenn Du 15 - 30 Minuten vor Beginn der Prüfung bereits im Testcenter
ankommst. Dort kannst Du sich in Ruhe orientieren und anmelden. Bei der Anmeldung werden
Deine Daten überprüft, insbesondere auch der Personalausweis bzw. Reisepass. Andere Dokumente
(wie Führerschein) sind nicht zugelassen.
Anschließend musst Du ein sogenanntes NDA (Non Disclosure Agreement) unterschreiben, also
eine Verschwiegenheitsvereinbarung, die Du vorab auf der Website² prüfen kannst und mit der Du
Dich verpflichtest, die Fragen nicht nach außen weiterzugeben.
Sobald die Formalitäten erledigt sind, wirst Du zu einem Computer geführt, an dem Du die Prüfung
online und unter Aufsicht durchführst.
Während der Prüfung sind natürlich keine Hilfsmittel zugelassen. Solltest Du versuchen, unerlaubte
Hilfsmittel zu benutzen, wird die Prüfung beendet und gilt als nicht bestanden. Zudem ist es nicht
gestattet, den Prüfungsraum zu verlassen, bevor Du die Prüfung für beendet erklärst bzw. die
offizielle Prüfungszeit abgelaufen ist.

2.3.4 Inhalt der Prüfung


Es erwarten Dich in der Prüfung 75 Fragen, für deren Beantwortung Du 90 Minuten Zeit hast. Die
Fragen sind in englischer Sprache verfasst. Sofern nicht ausdrücklich anders vermerkt, beziehen sich
die Fragen zur Drucklegung dieses Buches auf Version CMS 7.6 LTS (und keine andere!) von TYPO3
(Stand Juni 2016).
Informiere Dich vor der Prüfung auf der offiziellen Website³, auf welche TYPO3-Version sich die
Prüfung aktuell bezieht. Die allermeisten der in diesem Buch diskutierten Fragen behalten natürlich
auch nach einem Versionswechsel ihre Gültigkeit, so dass Du auch dann mit der Lektüre bestens
vorbereitet bist.
²http://typo3.org/fileadmin/t3org/documents/certification/NDA_-_TYPO3_Certification.pdf
³https://typo3.org/certification/certified-developer/
Einführung 15

Wenn Fragen über Beschriftungen im Backend gestellt werden (Modulnamen, Optionen etc.), liegt
immer das englischsprachige Backend zugrunde. So heißt das Modul zur Eingabe der Seitenelemente
in den Fragen stets “Page” und nicht “Seite”.
Du musst nicht exakte Werte für Optionen oder Ähnliches auswendig lernen - die Fragen sind meist
so aufgebaut, dass es eher darauf ankommt, den logischen Sachverhalt verstanden zu haben. Lies Dir
dazu die Fragen sehr aufmerksam durch, in einigen Fällen entscheidet ein einzelnes Wort darüber,
welche der angebotenen Antworten richtig ist.
Alle Fragen sind im typischen Stil von Multiple-Choice-Prüfungen gestellt, das heißt, zu einer Frage
werden mehrere (immer mindestens vier) mögliche Antworten angeboten. Dabei kann eine Antwort
richtig sein oder aber auch mehrere - als Hilfe wird die Anzahl der richtigen Antworten neben der
Frage vermerkt. Wenn Du nicht exakt die richtigen Antworten ankreuzst, gilt die ganze Frage als
falsch beantwortet.

2.3.5 Bewertung und Zertifikat


Nach der Prüfung werden die Einträge elektronisch ausgewertet und festgestellt, wie viel Prozent
der Antworten richtig waren. Die Zahl wird mit dem zuvor bestimmten Schwellenwert (“Cut-off
Score”) verglichen und auf diese Weise ermittelt, ob Du die Prüfung bestanden hast.
Ist dies der Fall, erhälst Du sofort die Meldung auf dem Bildschirm, dass Du die Prüfung bestanden
hast und bekommst innerhalb weniger Wochen das Zertifikat per Post zugesandt. Du darfst sich
fortan als “TYPO3 CMS Certified Developer” bezeichnen. Darüber hinaus kannst Du Werbung
mit dem erworbenen Titel machen, beispielsweise durch ein entsprechendes Banner, das auf der
Certification-Website zum Download zur Verfügung gestellt wird, durch Aufnahme des Titels in die
eigene Website oder auf der Visitenkarte; auch die Nennung des vollen Namens auf der Certification-
Website erfolgt auf Wunsch, eine Option, die die Mehrzahl der Prüfungsabsolventen bislang in
Anspruch nimmt.
Das Zertifikat ist nun 3 Jahre (36 Monate) lang gültig und muss dann erneuert werden.
Einführung 16

2.4 Zur Benutzung dieses Buches


Hier noch einige wichtige Hinweise und Klarstellungen zu den im Buch nun folgenden Aufgaben
und Fragen:

• Es hat keinen Sinn, die vorliegenden Fragen auswendig zu lernen. Wichtig ist, die dahinter
liegenden Zusammenhänge und Informationen erfasst, verstanden und in der Praxis genutzt
zu haben. In diesem Zusammenhang der ausdrückliche Hinweis: Es handelt sich bei den hier
diskutierten Fragen (natürlich) nicht um originale Prüfungsfragen!
• Aus didaktischen Gründen sind die Fragen einerseits in Kapiteln thematisch sortiert und bauen
andererseits auf anderen Fragen auf, wodurch sich manchmal allein aus dem Kontext der Frage
im Kapitel die Antwort erraten lässt. Das ist natürlich bei der Prüfung nicht so. Ebenso ist jeder
Teilbereich hier im Buch mit einer Einleitung versehen, die Dich in das Thema einführt - unter
Umständen enthält sie schon den ein oder anderen Hinweis auf eine richtige Antwort. In der
Prüfung hast Du diesen Luxus nicht, nutze ihn also so wenig wie möglich.
• Versuche möglichst den gesamten Stoff zu verstehen. Wenn Du beim Durcharbeiten des Bu-
ches feststellen, dass Dein Wissen noch lückenhaft ist, solltest Du diese Lücken schließen und
das entsprechende Kapitel dann noch einmal bearbeiten. Spekuliere nicht darauf, die Prüfung
nur zu bestehen, weil die falsch beantworteten Fragen nicht genug Punkte ausmachen, um
Deinen Erfolg zu gefährden.
• Viele der folgenden Fragen wurden entwickelt, um einen bestimmten Sachverhalt darzustel-
len, abzufragen und zu erläutern. Selbst wenn dabei versucht wurde, nie realitätsfremd und
akademisch zu werden, magst Du bisweilen denken: “Das hätte ich ohnehin nie auf diese
Weise gemacht”. Versuche Dich dennoch in die Frage hineinzudenken und sie zu beantworten.
• Den Fragen folgen zunächst die Anzahl der Antworten (direkt hinter der Frage), dann
mögliche Antworten und anschließend eine Erläuterung zum Sachverhalt. Am Ende der
Erläuterung findest Du dann die Angabe der richtigen Antworten. So ist gewährleistet, dass
Du nicht aus Versehen vorab die korrekte Lösung sehen und Dir damit die Möglichkeit
nimmst, die Frage unvoreingenommen zu beantworten.
• Selbst wenn Dir die richtige Antwort sofort klar sein sollte, kann es sinnvoll sein, die
Erläuterung aufmerksam zu lesen. Die Frage in der Prüfung könnte beispielsweise dasselbe
Thema, jedoch einen anderen Aspekt abfragen - diesen finden Du unter Umständen in der
Erklärung dargestellt.
• In den Beispielen wirst Du hin und wieder von der Beispiel-Domain
http://mytypo3domain.de
lesen. Damit ist natürlich Deine eigene Domain oder die Domain eines Projekts gemeint, an
dem Du arbeitest, keine reale Domain.
• Quellcode wird aufgrund der Formatierung oft auf mehrere Zeilen verteilt. Dafür wird am
Ende einer Zeile das Zeichen \ eingefügt - dieses dient nur der Orientierung, ist aber selbst
nicht Teil des Quellcodes.
Einführung 17

• Zur Steigerung der Qualität des Buches würde ich mich sehr freuen, wenn Du mir schreiben
würdest, wie es Dir in der Prüfung ergangen ist und welche Fragen und Erläuterungen
besonders hilfreich oder nicht so hilfreich waren. Schreibt mir unter: patrick@lobacher.de

Ich freue mich auf Dein Feedback!


3. Errors & Validations
In diesem Objective geht es vor allem um Fehler, Fehlerbehandlung und die Validierung.
Folgende Themen können demnach Teil der Prüfung sein:

• Validierung
• Eingebaute Validatoren
• Eigene Validatoren
• Fehlerbehandlung
• Fehlermeldungen
• Exception-Handling
• Debugging
Errors & Validations 19

3.1 Wie kann man auf ein nicht-valides


Domänenobjekt $blog in einer Action new zugreifen?
(2)

1. Der Zugriff ist immer möglich


2. Über die Methode initializeNewAction()
3. Über die Methode errorNewAction()
4. Über die Methode newAction(), nachdem man dort die Annotation @ignorevalidation
$blog gesetzt hat
5. Über die Methode __destruct()

Sobald man zu einer Methode gelangt und dort Methodenparameter verwendet werden, versucht
Extbase diese zu identifizieren. Steht dort beispielsweise $blog, so wird beispielsweise geprüft, ob
ein Array tx_extensionkey_pluginkey['blog'] existiert. Anschließend wird dieses Array durch
den Property-Mapper in ein Objekt verwandelt.
Dabei wird noch vor dem Eintritt in die Action die Validierung des Domänen-Objekts überprüft und
im positiven Fall der Zutritt zur Action verweigert. Daher ist Antwort 1. schon einmal falsch.
Tatsächlich gibt es nun eine Reihe von Methoden, die auch bei nicht-validen Objekten ausgeführt
werden, als da sind: initializeAction() (wird zuerst ausgeführt), initializeNewAction() (wird
als Zweites ausgeführt) und auch die errorAction().
Man kann auch die newAction() erreichen, dann aber nur, wenn man die Validierung über die
Annotation @ignorevalidation $blog ausschaltet.
Wa es allerdings nicht gibt, ist die Methode errorNewAction() - es sei denn, man setzt die Variable
errorMethodName entsprechend (diese ist per Default auf errorAction gesetzt.

Richtig sind also die Antworten 2. und 4.


Errors & Validations 20

3.2 Kann man auf Validierungsfehler des Objekts $blog


im Controller zugreifen? (1)

1. Nein, das ist manuell nicht möglich


2. Ja, über $blog->getErrors()
3. Ja, über $this->getErrors()
4. Ja, über $this->controllerContext->getRequest()->getErrors()
5. Ja, über $this->errors

Es kommt oft vor, dass man im Controller auf die Validierungsfehler in einem Objekt zugreifen und
ggf. darauf abgestimmte Aktionen ausführen möchte.
Hierfür kann man ein Request-Objekt verwenden, welches man über
$this->controllerContext->getRequest()
erhält. Dort wendet man nun die Methode $request->getErrors() an, um die Validierungsfehler
zu erhalten.
Allerdings gibt es keine Methode getErrors(), die man auf ein Domänen-Objekt oder per $this
ansprechen könnte - wohl aber auf den Request an sich, also
$this->controllerContext->getRequest()->getErrors().

Richtig ist also Antwort 4.


Errors & Validations 21

3.3 Welche Validation Annotations sind prinzipiell


gültig? (3)

1.

@validate NotEmpty, Word(max=3)

2.

@validate $blog NotEmpty, Word(max=3)

3.

@validate $blog NotEmpty, \Pluswerk\Simpleblog\Validation\Validator\WordValidator(max=3)

4.

@validate $blog NotEmpty, Pluswerk.Simpleblog:Word(max=3)

5.

@validate $blog NotEmpty, Pluswerk.Simpleblog:WordValidator(max=3)

Grundsätzlich notiert man eine Validation-Annotation entweder bei einer Property im Domain-
Model - dann lautet die Syntax @validate [Validator1] [,Validator2] .... Notiert man die
Annotation bei einer Action, so ist die Syntax wie folgt: @validate $var [Validator1] [,Vali-
dator2] .... Damit folgt Antwort 1. und 2. grundsätzlich dieser Syntax. Allerdings existiert kein
Standard-Validator mit dem Namen Word, sodass beide Antworten falsch sind.
Erstellt man eigene Validatoren, so werden diese in dem Verzeichnis
Classes\Validation\Validator\
abgelegt. Um diese Validatoren zu referenzieren, kann man den kompletten Pfad verwenden, wie er
unter 3. aufgeführt ist.
Es ist aber auch möglich, lediglich Vendor-Prefix und Extension-Key zu verwenden und an-
schließend mit einem Doppelpunkt getrennt den Namen des Validators, entweder mit oder ohne
Validator anzugeben.
Richtig ist also Antwort 3., 4. und 5.
Errors & Validations 22

3.4 Von welcher Validator-Klasse leiten alle


Default-Validatoren ab? (1)

1. ObjectValidator
2. ValidationValidator
3. DefaultValidator
4. AbstractValidator
5. ValidationInterface

Alle Default-Validatoren befinden sich im Verzeichnis


typo3/sysext/extbase/Classes/Validation/Validator/.

Jeder der dort enthaltenen Validatoren (und letztlich auch jeder individuelle) leitet entweder
vom AbstractValidator oder vom GenericObjectValidator ab. Der GenericObjectValidator
erweitert letztlich aber wieder den AbstractValidator.
Der AbstractValidator allerdings implementiert das ValidatorInterface (und nicht Valida-
tionInterface wie in Antwort 5. genannt).

Richtig ist also Antwort 4.


Errors & Validations 23

3.5 Was (wenn überhaupt) wird benötigt, um Optionen


in einem Validator zu verwenden - z.B.
Pluswerk.Simpleblog:Word(max=3)? (1)

1. Hierfür wird nichts zusätzlich benötigt


2. Es wird ein TypoScript-Schlüssel Persistence.Validation.options.max = true benötigt
3. Man braucht eine Property $supportedOptions innerhalb der Validation-Klasse
4. Es muss eine entsprechende Annotation innerhalb der Validation-Klasse existieren
5. Die Option muss als Methodenparameter in der Methode validate() der Validation-Klasse
existieren

Schauen wir uns für die Antwort am besten eine Beispiel-Implementierung des obigen Validators
an:

<?php
namespace Pluswerk\Simpleblog\Validation\Validator;

class WordValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator


{
protected $supportedOptions = array(
'max' => array(3, 'Maximum word count for a valid string', 'integer'),
);

public function isValid($property)


{
$maxWords = $this->options['max'];
$usedWords = str_word_count($property, 0);
if ($usedWords <= $maxWords) {
return TRUE;
} else {
$this->addError('Reduce word count - allowed are <strong>' . $maxWords . '</strong> words maxi\
mum (you used ' . $usedWords . ' words)!', 1451318887);
return FALSE;
}
}
}

Die Verwendung der Option im Quellcode erfolgt durch $this->options['max']; - dafür muss
diese Option allerdings über die Property $supportedOptions registriert werden. Wird dies nicht
gemacht, erfolgt eine Fehlermeldung.
Richtig ist also Antwort 3.
Errors & Validations 24

3.6 Welche Auswirkung hat eine Methode errorAction()


im Controller? (1)

1. Sobald es einen beliebigen Fehler im Controller gibt, wird die Methode aufgerufen
2. Sobald es einen beliebigen Fehler im View gibt, wird die Methode aufgerufen
3. Die Methode wird vor der eigentlich aufzurufenden Action aufgerufen
4. Die Methode wird immer nach der eigentlich aufzurufenden Action aufgerufen
5. Sobald es einen Validierungs-Fehler im Controller gibt, wird die Methode aufgerufen

Es gibt einige spezielle Methoden im Controller, die per Konvention aufgerufen werden. So gibt
es beispielsweise eine initializeAction(), die immer vor einer aufzurufenden Action angesteuert
wird. Danach wird nach einer Action initialize[ActionName]Action() gesucht, bevor die Metho-
de [actionName]Action() aufgerufen wird.
Sobald es aber zu einem Validierungsfehler beim Eintritt in eine Methode kommt, wird die Methode
errorAction() des Action-Controllers (von dem der eigene Controller ableitet) aufgerufen, in
der lediglich der Cache geleert, eine FlashMessage geschrieben und dann zur eigentlichen Action
weitergeleitet wird.

protected function errorAction()


{
$this->clearCacheOnError();
$this->addErrorFlashMessage();
$this->forwardToReferringRequest();

return $this->getFlattenedValidationErrorMessage();
}

Diese Action kann aber jederzeit im eigenen Controller überschrieben werden.


Richtig ist also Antwort 5.
Errors & Validations 25

3.7 Ist es möglich, Objekte manuell zu validieren? (1)

1. Nein, das ist nicht möglich. Das wird immer beim Eintritt in die Action automatisch gemacht
2. Nein, das ist nicht möglich. Das wird immer beim Zugriff das Repository automatisch gemacht
3. Nein, das ist nicht möglich. Das wird immer beim Initialisieren des Controllers automatisch
gemacht
4. Ja, über den Aufruf der Methode validate()
5. Ja, über den Aufruf der Methode hasErrors()

Normalerweise werden Objekte tatsächlich immer automatisch beim Eintritt in die Action automa-
tisch validiert. Allerdings kann es Fälle geben, an denen man diesen Automatismus nicht benötigt
und manuell validieren möchte.
So findet beispielsweise die automatische Validierung in den InitializeActions nicht statt.
Eine manuelle Validierung kann wie folgt durchgeführt werden - im folgenden Beispiel wird geprüft,
ob das Argument agb (welches als Checkbox in einem Formular realisiert wurde) angeklickt wurde:

$arguments = $this->request->getArguments();
$validatorResolver = $this->objectManager->get(TYPO3\CMS\Extbase\Validation\ValidatorResolver::class\
);
$validator = $validatorResolver->createValidator('Conjunction');
$validator->addValidator($validatorResolver->createValidator('NotEmpty'));
$validator->addValidator($validatorResolver->createValidator('Boolean'));
$result = $validator->validate($arguments['agb']);

if ($result->hasErrors()) {
// AGB-Feld wurde nicht angeklickt
$this->addFlashMessage(LocalizationUtility::translate('must_agree_agb',$this->extensionName), ''\
, \TYPO3\CMS\Core\Messaging\FlashMessage::ERROR);
$this->forward(...);
}

Richtig ist also Antwort 4.

Das könnte Ihnen auch gefallen