ebook img

TYPO3 Extbase: Modern Extension Development with Extbase and Fluid PDF

418 Pages·2019·8.949 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview TYPO3 Extbase: Modern Extension Development with Extbase and Fluid

TYPO3 Extbase, 3rd Edition (English) Modern Extension Development for TYPO3 CMS with Extbase and Fluid Michael Schams Thisbookisforsaleathttp://leanpub.com/typo3extbase-3rd-edition-en Thisversionwaspublishedon2019-12-06 ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLeanPublishingprocess.Lean Publishingistheactofpublishinganin-progressebookusinglightweighttoolsandmanyiterationstoget readerfeedback,pivotuntilyouhavetherightbookandbuildtractiononceyoudo. ©2019MichaelSchams Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Patrick’sBackground. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Michael’sBackground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Piracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii 1. TheHistoryofExtbaseandFluid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 TheOriginofTYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 BerlinManifesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 NewPHPFramework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 TheDeathofthePhoenix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 TheSplit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 ExtbaseandFluid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. PHPProgrammingBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1 Object-OrientedProgramming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 ClassesandObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1 TheArrowOperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.2 TheConstructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.3 AccessbyUsing$this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3.4 FillingMethodswithContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4 InheritanceofClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4.1 AccessbyUsingparent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4.2 VerifyingClassDerivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5 AbstractClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.6 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.7 Visibility:PublicandProtected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.7.1 GetterandSetter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.8 TypeHints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.9 ReturnTypeDeclarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.10 StrictTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.11 StaticCalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.12 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.13 ImportantDesignPatterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.13.1 Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 CONTENTS 2.13.2 Prototype. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.13.3 DependencyInjection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.14 Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.15 CodingStandards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.15.1 PSR-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.15.2 PSR-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.15.3 CodeComments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3. Domain-drivenDesign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.1 InfrastructureIgnorance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2 Vertical-LayeredArchitecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.3 TheDomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.1 UbiquitousLanguage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3.2 BuildingBlocksofDDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.4 StructuringDDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.4.1 BoundedContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.4.2 ContextMap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.4.3 CoreDomain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.4.4 SharedKernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.5 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4. Preparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.1 TYPO3Pre-installed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.2 SettingUpTYPO3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.1 SystemRequirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.2 InstallationUsingPHPComposer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.2.3 SitePackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2.4 DevelopmentApplicationContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3 ExtensionFundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.3.1 ExtensionKeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.3.2 TYPO3ExtensionRepository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.3.3 TERExtensionsandComposer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.3.4 FurtherPublishingMethods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.3.5 Extensions,Plugins,Modules,andDistributions . . . . . . . . . . . . . . . . . . . . 52 4.3.6 BehindtheScenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 4.3.7 FileandDirectoryStructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4 DevelopmentEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.5 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5. CreateaDomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.1 DomainModelUsedinthisBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2 BasicConcept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2.1 TheGlossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.2.2 DomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.3 TheTYPO3ExtensionBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 5.3.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 CONTENTS 5.3.2 HowtheExtensionBuilderWorks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.3 TargetAudience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.4 Limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.5 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 5.3.6 ExtensionProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 5.3.7 DomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.3.8 DomainModelProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.3.9 DomainModelRelations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.4 ExtensionActivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.5 AutoloadingPHPClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.6 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6. AnalysingInitialFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 6.1 FilesCreatedbytheExtensionBuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 6.1.1 FilesintheFolderClasses/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.1.2 FilesintheFolderConfiguration/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.1.3 FilesintheFolderResources/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.1.4 FilesintheFolderTests/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.1.5 FilesintheRootDirectory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 6.2 AdditionalFunctionalityoftheExtensionBuilder . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.2.1 ModifyingtheModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.3 TypoScriptconstantsandsetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.4 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 7. TheCRUDProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 7.1 Model-View-ControllerinExtbase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 7.2 CreatinganObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.2.1 CreateActioninController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 7.2.2 CreatingtheTemplateforthelistAction(). . . . . . . . . . . . . . . . . . . . . . . 106 7.2.3 SideNote:TemplateRendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 7.2.4 CreateStaticBlogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 7.2.5 PersistingBlogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.2.6 HowPersistenceWorks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 7.2.7 ThePersistenceManager:ManualPersistence . . . . . . . . . . . . . . . . . . . . . . 113 7.2.8 CreateYourOwnAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.2.9 FormtoCreateanObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 7.3 ReadinganObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7.4 UpdatinganObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.5 DeletinganObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.5.1 Exercise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.6 Fine-tuningoftheVisualAppearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.6.1 “FontAwesome”Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.6.2 ListView:AlignButtonsRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.6.3 ButtonMargins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7.7 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 CONTENTS 8. FluidTemplating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 8.1 Templates,LayoutsandPartials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.2 UsinganOverallLayout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 8.2.1 MultipleSections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 8.2.2 OptionalSections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 8.3 Partials. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 8.3.1 SimplePartials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 8.3.2 ComplexPartials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 8.4 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 9. QueryManagerandRepositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 9.1 RepositoryClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 9.2 MagicFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 9.3 DefaultStructureofaQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 9.3.1 SideNote:Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 9.4 AdjustingQueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 9.4.1 DetermineResultSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 9.4.2 LimitingResultSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.4.3 LogicalConjunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.4.4 NativeSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 9.4.5 QuerySettings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 9.5 Example:SearchforKeywordinTitle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 9.6 DynamicSearchintheRepository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 9.7 SideNote:RequestObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9.8 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 10. TypoScriptandFlexFormConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 10.1 TypoScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10.1.1 SetupScope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10.1.2 Sub-keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 10.1.3 Option:view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 10.1.4 Option:persistence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 10.1.5 Option:objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 10.1.6 Option:features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 10.1.7 Option:mvc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 10.1.8 Option:settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 10.1.9 Option:_LOCAL_LANG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 10.1.10 Option:_CSS_DEFAULT_STYLE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 10.2 FlexForms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 10.2.1 FlexFormConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 10.2.2 AccessingtheFlexFormConfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . 182 10.2.3 AccessingSettingsOutsideofaController . . . . . . . . . . . . . . . . . . . . . . . 184 10.2.4 SwitchableControllerActions(SCA) . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 10.3 TypoScriptforBackendModules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 10.4 AdjustmentsfortheNextChapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 10.5 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 CONTENTS 11. ValidationandErrorHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 11.1 PointwhereValidationHappens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 11.2 DisplayingErrors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 11.2.1 ViewHelper:ValidationResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 11.3 ValidationOverview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 11.4 PropertyValidation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 11.4.1 Built-inValidators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 11.4.2 MultipleValidators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 11.4.3 CustomValidators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 11.5 ObjectValidation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 11.6 ActionValidation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 11.7 ExplicitlyIgnoreValidation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 11.8 FlashMessages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 11.8.1 GeneratingFlashMessages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 11.8.2 DisplayingFlashMessages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 11.8.3 FlashMessageQueues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 11.8.4 TheFlashMessageQueueinaController . . . . . . . . . . . . . . . . . . . . . . . . 210 11.8.5 PracticeOption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 11.9 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 12. ViewHelpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 12.1 ViewHelpersinGeneral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 12.1.1 Namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 12.1.2 PHPClassFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 12.2 ViewHelpersintheTYPO3Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 12.3 ViewHelpersbytheCommunity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 12.4 CustomViewHelpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 12.4.1 Text-ViewHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 12.4.2 TagBased-ViewHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 12.4.3 Condition-ViewHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 12.4.4 Widget-ViewHelper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 12.5 TestYourKnowledge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 12.5.1 Exercise:TheGravatarViewHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 12.5.2 Exercise:TheA-to-ZWidget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 12.6 MethodsrenderStatic()andrender() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 12.7 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 13. Relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 13.1 RelationinDomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 13.2 TheTableConfigurationArray(TCA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 13.2.1 TCA:ctrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.2.2 TCA:interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.2.3 TCA:types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.2.4 TCA:palettes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.2.5 TCA:columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 13.3 TheCRUDProcessofPosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 CONTENTS 13.3.1 Preparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 13.3.2 CreatePosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 13.3.3 ReadPosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 13.3.4 UpdatePosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 13.3.5 DeletePosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 13.4 m:n-Relations(Tags) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 13.4.1 CreationofTagsintheBackend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 13.4.2 RepositoryforTags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 13.4.3 ReadTagsinthePostController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 13.4.4 TemplatesandPartialsAdjustments . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 13.4.5 ShowTagsinListofPosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 13.5 1:1-Relations(Authors) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 13.5.1 FrontendUsersandGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 13.5.2 MapAuthortofe_users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 13.5.3 ImplementingtheFrontendPart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 13.5.4 Auto-AssignFrontendUser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 13.5.5 ObfuscateEmailAddresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 13.6 CommentsasAJAXRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 13.6.1 ControllerandAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 13.6.2 AjaxController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 13.6.3 DisplayofComments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 13.6.4 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 13.6.5 AJAXPageTypeinTypoScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 13.7 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 14. LabelsandLocalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 14.1 WhyUseLanguageFiles? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 14.2 LanguageFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 14.2.1 Placeholders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 14.2.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 14.2.3 UpdateallTemplateFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 14.3 OverwriteLabelsinTypoScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 14.4 LanguageConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 14.4.1 WebsiteLanguage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 14.4.2 SiteConfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 14.4.3 PageTranslation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 14.4.4 ContentElementTranslation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 14.5 LocalizedLanguageFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 14.5.1 OverwriteLabelsinTypoScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 14.6 LanguageLabelsinPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 14.7 DomainObjectLocalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 14.7.1 TheTableConfigurationArray(TCA) . . . . . . . . . . . . . . . . . . . . . . . . . . 312 14.7.2 TranslateRecords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 14.8 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 15. PropertyMapperandTypeConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 CONTENTS 15.1 PropertyMapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 15.1.1 TypeConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 15.1.2 PropertyMapperConfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 15.2 FileUploadFunctionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 15.2.1 SecurityAspects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 15.2.2 BlogController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 15.2.3 UploadFileReferenceConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 15.2.4 BlogDomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 15.2.5 TCAoftheBlogDomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 15.2.6 FileReferenceDomainModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 15.2.7 TypoScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 15.2.8 PartialsandTemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 15.2.9 FormUpload-ViewHelper. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 15.3 FileUploadTest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 15.4 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 16. BackendModule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 16.1 RequirementsandSolutionDesign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 16.2 BasicComponents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 16.2.1 ModuleRegistration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 16.2.2 LanguageFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 16.2.3 AbstractBackendController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 16.3 FirstFunction:ListComments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 16.3.1 CommentController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 16.3.2 FluidTemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 16.4 SecondFunction:Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 16.4.1 ExtendModuleRegistration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 16.4.2 ExtendActionMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 16.4.3 DashboardController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 16.4.4 FluidTemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 16.4.5 VisualiseStatisticalData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 16.4.6 RequireJS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 16.4.7 AJAXintheTYPO3Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 16.4.8 AddAJAXFunctionalitytoJavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . 371 16.4.9 Fine-tuningandAdditionalNotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 16.5 StyleguideExtension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 16.5.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 16.5.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 16.6 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 17. Clean-upandFinalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 17.1 Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 17.2 PSR-2CodingStandard(“PHPCodeSniffer”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 17.3 DocBlocks(“phpDocumentor”) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 17.4 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 17.5 Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 CONTENTS 18. SecurityBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 18.1 TYPO3SecurityTeam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 18.2 SecurityinTYPO3Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 18.3 MostCommonSecurityVulnerabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 18.3.1 OWASPTop10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 18.3.2 InjectionFlaws . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 18.3.3 Cross-siteScripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 18.3.4 Cross-SiteRequestForgery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 18.3.5 LackofAccessControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 18.4 FurtherTypicalSecurityVulnerabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 19. What’sNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 19.1 GetOfficiallyCertified . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 TYPO3ReleaseHistory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 ExtensionDeclarationFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 ReferencesandFurtherReading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 UnofficialWebsites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 PHPSecurity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Changelog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.