Entdecken Sie eBooks
Kategorien
Entdecken Sie Hörbücher
Kategorien
Entdecken Sie Zeitschriften
Kategorien
Entdecken Sie Dokumente
Kategorien
Patrick Lobacher
Dieses Buch wird verkauft, unter http://leanpub.com/typo3certifieddeveloper
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.
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
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
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).
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
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
Fluid
Alles rund um die Templating-Engine “Fluid”
Einführung 9
TypoScript
TypoScript im Zusammenspiel mit der Extension-Entwicklung
Security
Sicherheitsrelevante Sachverhalte
Caching
Fragen rund um das Caching
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.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:
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
In das Eingabefeld gibt man nun “TYPO3” ein und wählt damit die TYPO3-PearsonVUE Homepage
aus.
Einführung 12
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
Registrierung Schritt 2
Die Anmeldung wird nun offensichtlich persönlich geprüft - denn es erfolgt eine Meldung, dass man
Einführung 14
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.
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.
• 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
• Validierung
• Eingebaute Validatoren
• Eigene Validatoren
• Fehlerbehandlung
• Fehlermeldungen
• Exception-Handling
• Debugging
Errors & Validations 19
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.
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().
1.
2.
3.
4.
5.
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
1. ObjectValidator
2. ValidationValidator
3. DefaultValidator
4. AbstractValidator
5. ValidationInterface
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).
Schauen wir uns für die Antwort am besten eine Beispiel-Implementierung des obigen Validators
an:
<?php
namespace Pluswerk\Simpleblog\Validation\Validator;
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
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.
return $this->getFlattenedValidationErrorMessage();
}
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(...);
}