A Global Standard for TYPO3 Certifications
The TYPO3 Certification Team is committed to the development of a global standard for TYPO3 certifications. The certification program verifies the knowledge of the certified and the organizations employing them. The exams consist of multiple steps, each requiring different expertise.
A Collaboration between the Certification and the Education Team provides learning materials to support the certification candidates.
Syllabus
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. TYPO3 CMS Certified Developer can implement an extension completely in a state-of-the-art way. They write clean code by following the TYPO3 Coding Guidelines (CGL), and they are 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).
This SkillSet is based on TYPO3 version 12 LTS and was created by the TYPO3 Education Committee.
- What is MVC?
The MVC pattern, what it can be used for, and common implementations.
Goals- I have a basic understanding of what MVC is.
- What is a Templating Engine?
Introduction to the basic concept of a templating engine/processor.
Goals- I can explain what the basic concept of a templating engine is.
- I can identify needed parts for a templating engine.
- PSR Standards
Knowing the most important PSR programming standards in the TYPO3 world.
Goals- I know what PSR is.
- I know the topics the most important standards cover.
- Domain-Driven Design (DDD)
Understanding the concept of DDD.
Goals- I know the concept, its purposes and main points.
- I know where to find information to learn more.
- PHP
Ability to develop and execute PHP scripts.
Goals- I know how to execute PHP scripts in my local environment.
- I know how PHP is executed by a web server.
- I can develop functionality in PHP.
- Model
This skill covers the model in the MVC context.
Goals- I know which role models play in the software architectural pattern MVC.
- View Pattern
What is a view in MVC context.
Goals- I know which role the view plays in the pattern.
- PSR-14: Event Dispatching
This skill covers the basics of the PHP standard on Event dispatching.
Goals- I know the four use cases of events specified by PSR-14.
- I know about the different components of a PSR-14-compliant event system (Listener, Emitter, Dispatcher, ListenerProvider).
- I know when mutable or immutable events should be used.
- Dependency Injection
Knowledge about dependency injection in general.
Goals- I understand the concept of dependency injection, its benefits and limitations.
- I know when dependency injection should be used.
- The builder design pattern in TYPO3
TYPO3 provides some concrete classes following the Builder design pattern.
Goals- I know the different TYPO3 builder implementations.
- I can use the different TYPO3 builder implementations.
- Builder design pattern
Understanding the “Builder” Design Pattern.
Goals- I know the Builder Pattern and what it entails.
- I know how to retrieve or create new instances of a builder.
- I know how to re-use and not re-use builder instances.
- Software Design Patterns
This skill covers Software Design Patterns, established solutions for repeated problems in software development.
Goals- I know what Design Patterns are and why they are useful
- I know examples of Design Patterns used in TYPO3
- I know when to apply Design Patterns in my own code
- What is Fluid?
Definition of Fluid and its possible use with regards to the Model View Controller pattern.
Goals- I can explain what Fluid is.
- I can define its role in the context of a MVC system.
- Outputting Variables
Basic usage of variables inside Fluid templates and knowledge about escaping.
Goals- I can find out which variables are passed to a Fluid view.
- I can output variables with the according path syntax.
- I know how Fluid escapes variable output in templates.
- I know how to disable escaping of variables.
- I also know which security risks (XSS) may occure, when disable escaping of variables.
- ViewHelpers
Getting to know what a ViewHelper is.
Goals- I know what ViewHelpers are.
- I know what a Namespace is.
- I can use ViewHelpers in my template.
- I know which ViewHelpers are shipped by stand-alone Fluid, and which are provided by TYPO3 CMS.
- Templates, Layouts, Partials
Fluid Templates, Layouts, Partials - their interaction and properties.
GoalsI know
- what Fluid Templates are
- what Fluid Layouts are
- what Fluid Partials are
- how Templates, Layouts and Partials are connected
I can
- structure Templates, Layouts and Partials
- combine Templates, Layouts and Partials for templating
- use Templates, Layouts and Partials to realise a specific template example
- ViewHelper: Comment
Including comments in Fluid templates.
Goals- I know how to include Fluid comments in my templates.
- I know the difference between HTML comments and Fluid comments regarding the rendered HTML output.
- ViewHelper: If/Else
Creating if/else statements within Fluid templates.
Goals- I can create an if/else statement in my templates with the help of the according Fluid ViewHelper.
- I can apply conditions using the inline notation of Fluid.
- ViewHelper: For-Loop
Iterating through a list with the for ViewHelper.
Goals- I know how to cycle through items with the help of the for ViewHelper inside my Fluid templates.
- I also know how to utilize the iteration object within a cycle.
- Importing ViewHelpers
Using third party ViewHelpers in your Fluid templates.
Goals- I can include third party ViewHelpers in my Fluid templates.
- I know that a TYPO3 Developer can build custom ViewHelpers
- ViewHelper: Render
Using f:render to render sections and partials as well as passing arguments.
Goals- I can use f:render in my templates to render sections and partials.
- I can pass arguments (along with optional flagging).
- Using the Fluid View
Knowing and understanding the different parts of a Fluid template view.
Goals- I understand the API of a Fluid view.
- I know the public methods that assign variables and template paths.
- I know the internal API to configure Fluid behaviour.
- I know the action of rendering a template.
- ViewHelper: Link, Uri
Using the Fluid ViewHelpers f:link.* and f:uri.*.
Goals- I know the ViewHelpers of the f:link.* family such as f:link.typolink, f:link.email etc. and their important arguments.
- I know the ViewHelpers of the f:uri.* family and their important arguments.
- I know how to use the f:link.* and f:uri.* ViewHelpers properly.
- ViewHelper: Format
Using Fluid Format ViewHelpers.
Goals- I know how to use Fluid's format ViewHelper and its arguments and purposes.
- ViewHelper: Image
Using the Fluid ViewHelper f:image().
Goals- I know the important arguments of f:image() ViewHelper (image, src, crop, cropVariant, loading) and how to use the ViewHelper.
- JSON
The JSON format and its usages in web development.
Goals- I know how to decode JSON with PHP functions.
- I know how to create a valid JSON string with PHP functions.
- Extbase JSON View
The built-in JSON View in Extbase.
Goals- I know how the JSON view differs from a normal HTML-based view.
- I know how the JSON view works when the data structure parts are selected for rendering.
- I can configure the JSON output for simple and complex (nested) data structures.
- Extbase Fluid View
The Fluid-based HTML view of Extbase.
Goals- I know how the Fluid view relates to Fluid.
- I can use layouts and partials in my templates.
- I can configure the view to include templates from multiple directories, with correct priority.
- ViewHelper: Debug
Utilising output to access Fluid variables.
Goals- I know how to use the debug ViewHelper to output variables available to Fluid.
- I know what makes this ViewHelper more appropriate than using a simple echo in my controller.
- ViewHelper: Form
The TYPO3 CMS form ViewHelper for Fluid.
Goals- I know how Extbase forms can be created in Fluid templates.
- I know how data can be filled into form fields.
- I know how to connect object properties and form fields.
- I can create a form and connect it to an object.
- I can use the different view helpers to create form fields.
- I know how Extbase ensures that no additional fields are passed by malicious actors.
- Building data processors
This skill covers the creation of data processors for TYPO3.
Goals- I know how to implement a data processor.
- I know how to alias a data processor.
- I know how to support `stdWrap` for data processor properties.
- I know how to execute data processors, e.g. for nesting.
- XLIFF / locallang.xlf
Working with XLIFF files in TYPO3 for multilingual websites. Includes writing and extending XLIFF files, overriding translations in TypoScript, and using the f:translate ViewHelper.
Goals- I know what XLIFF is.
- I know how to write and extend an XLIFF file.
- I know how to introduce new languages and generate the needed XLIFF file.
- I know how to override the translations of an extension in TypoScript.
- I know how to access the translations with the f:translate-Viewhelper
- File abstraction layer (FAL)
Know about transparent inclusion of external file sources into TYPO3.
Goals- I know there is an abstraction layer between actual file storages and their handling in TYPO3.
- Flexform Concepts
Basics about the concept of Flexforms and how it relates to the TCA.
Goals- I know what a Flexform data structure is and how it compares to a similar TCA data structure.
- I know how data for a Flexform field is stored.
- I can create a Flexform data structure in XML.
- I can configure a Flexform field to use my XML data structure.
- Flexform Configuration Data Structure
How to create and configure a data structure for my plugin’s configuration.
Goals- I know how configuration is managed by the “plugin” content type.
- I can provide a custom configuration data structure for my plugin.
- Accessing FlexForm Data
Using data provided in FlexForms in plugin CEs and custom records.
Goals- I know how FlexForm data is stored in the database.
- I can extract data from a FlexForm field.
- I can modify the contents of a FlexForm field.
- Database Management System (DBMS)
Knowledge about DBMS.
Goals- I know what a DBMS is and what it is used for.
- I can name some examples.
- I know what the term “relational” in the context of DBMS means.
- Doctrine DBAL
Basic knowledge about the Doctrine component for transparently accessing several DBMS in PHP.
Goals- I know what Doctrine DBAL is.
- I know the difference between Doctrine DBAL and Doctrine ORM.
- I know the role of Doctrine DBAL in TYPO3.
- Using the QueryBuilder
How to write queries in TYPO3.
Goals- I know how to use the QueryBuilder built into TYPO3.
- I know how to write a secure query that can target different DBMS.
- I know how the Core QueryBuilder differs from Doctrine DBAL’s QueryBuilder
- Using Query Restrictions
How to restrict database queries.
Goals- I know about the restriction containers applied automatically in TYPO3.
- I know the available restrictions and their usage.
- I know how to change which restrictions are applied.
- TYPO3 Debugging Utilities
Knowledge about debugging utilities provided by TYPO3.
Goals- I know the built-in mechanics to output debug messages:
- Extbase DebuggerUtility
- DebugUtility
- admin panel
- I know how to add debug output to the frontend.
- I know how to add debug output to the backend.
- I know the built-in mechanics to output debug messages:
- Tracing Errors in Logs
Knowledge about log sources and how to utilize them in order to resolve errors.
Goals- I know where to look when my instance throws error messages or white pages.
- I know which configuration options define the error output of TYPO3 and Extbase.
- I know how to limit error output to development machines or certain IPs on live instances.
- Logging API
Knowledge about the logging API provided by TYPO3.
Goals- I know how to compose a proper log message and of which parts it consists.
- I know about the different log levels and their meaning.
- I know how to get and use a logger in my code.
- I know about log channels and how to use them in my code.
- Debugging in PHP
Basic knowledge about error tracing methods in PHP.
Goals- I know about simple methods to print values to output (var_dump, print_r, echo, die).
- I know how to set up and use a debugging tool like Xdebug.
- Knowledge about Environment Error Logs
Ability to locate logs provided by system components.
Goals- I know where theerror logs of TYPO3, a web server and PHP are located.
- I can access these logs in order to trace errors occurring in my environment.
- I know how to interpret error log messages in order to resolve the error.
- PSR-7: Request/Response
This skill covers the PSR standard for HTTP request/response objects.
Goals- I have basic knowledge about the standard PSR-7.
- I know how to deal with request and response objects in PHP.
- Extending Existing Functionality
Extending core and extension functionality without changing code.
Goals- I know what hooks are and the two different types of hook implementations.
- I know about PSR-14 events and how they are implemented in TYPO3.
- I know what userFuncs in the TCA are and how to take advantage of them.
- I can identify places where TYPO3 allows to extend built-in functionality.
- PSR-3: Logger Interface standard
Knowledge about the PSR-3 logging standard for PHP.
Goals- I know about the interfaces defined by PSR-3.
- I know about the standard implementations of PSR-3.
- I know the API methods the PSR-3 LoggerInterface provides for writing log messages.
- I can use PSR-3-based logging in my own extensions.
- The Caching Framework
This skill covers the Core's caching framework. It shows how to use existings caches and register custom caches and the types of cache frontends and backends. Additional topics are expiration and tagging of cache entries and flushing of caches.
GoalsI can:
- use existing caches
- register and use custom caches
- decide which types of cache frontends and backends to use for which purpose
- Commands
This skill covers the creation of command-line commands for TYPO3, based on the Symfony Console component.
Goals- I know how to execute existing Symfony CLI commands.
- I can create and register new Symfony CLI commands
- I can find my way around existing commands and can modify them.
- Extension scanner
This skill covers the Extension Scanner, which extension authors and project maintainers can use to detect possible problems in their extensions while upgrading them to a newer TYPO3 version.
Goals- I can use the extension scanner from within the TYPO3 BE and from the command line. I know what kind of problems the scanner finds, and the limitations of the scanner.
- I can interpret findings of the scanner and judge whether they are relevant for my project.
- Flash Messages
This skill covers flash messages, a mechanism used to communicate e.g. results of an action to the user.
Goals- I know where the Core flash messages and notifications can be used (and where not). I know which type of flash message to use for what purpose.
- I can create and output flash messages using PHP, HTML and JavaScript. I can output flash messages created in existing code, e.g. other extensions.
- Mail API
This skill covers the TYPO3 Mail API, which internally uses Symfony’s Mailer and Mime component for creating and sending emails.
Goals- I can configure the Mail API for different contexts.
- I can create new emails in my extensions and send them through the Mail API.
- I know how to create Fluid-based emails.
- I am familiar with the pros and cons of the different transport methods.
- Error handling/Exception handling
This skill provides knowledge on TYPO3-specific ways of handling errors during program execution and finding information about any errors that occurred.
Goals- I can configure the error and exception handling for development and production.
- I know when errors are handled by the error handler, and where to find any logged errors.
- DataHandler (TCE= TYPO3 Core Engine)
This skill handles basic knowledge of the DataHandler, a TYPO3 Core component for processing user data. It also covers how it can be leveraged in custom developed extensions.
Goals- I know how the DataHandler processes data entered in forms in the Backend.
- I know about hooks I can use for modifying data during processing.
- I know how to use DataHandler in my own extensions (e.g. for mass-creation of records).
- I can modify data during the processing of certain tasks (e.g. versioning).
- Writing and using own Symfony Expressions
This skill covers the Symfony Expression syntax used in e.g. TypoScript conditions and ways to extend that functionality with custom code.
Goals- I know the Symfony component "Expression Language" and its syntax.
- I can write and register my own ExpressionFunctionProviders.
- I can provide custom TypoScript conditions using my own ExpressionFunctionProviders.
- I know where expressions are used in site configurations.
- Contexts & Aspects
This skill introduces usage of the request context and aspects that can be used to enrich this context, e.g. with localization information.
Goals- I know the difference between the ApplicationContext and the Context API.
- I can use the Context API, know which Aspects exist, and can access information from Aspects.
- I know how to add my own Aspects to the Context.
- PageTitle API
This skill covers the PageTitle API, which can be used to flexibly modify the title of the generated page, e.g. in the single view of a plugin.
Goals- I know about the structure of the PageTitle API.
- I can implement and register custom PageTitleProviders to modify the document's title.
- Using the PageRenderer in Extensions
This skill covers the PageRenderer for extension usage, a TYPO3 Core component that is responsible for collecting and generating information about various parts of the page and handling the final output of a page.
Goals- I can use the PageRenderer to modify or extend CSS, JavaScript and other header information in frontend and backend.
- MetaTag API
This skill covers the MetaTag API, which can be used to manipulate the meta tags in the <head> section of the generated HTML page.
Goals- I can use the MetaTag API to add, modify or remove meta tags.
- I can implement and register my own MetaTagManagers.
- Environment class
This skill covers knowledge on TYPO3’s Environment class, which provides system-specific details that are independent from the system environment.
Goals- I know which kind of information the Environment class in the TYPO3 Core provides.
- I can write code that is not dependent on a specific type of operating system (Windows, Linux, etc.)
- The System Registry API
This skill covers the system registry API, provided by the TYPO3 Core to store instance-specific data.
Goals- I can use the registry API to read and write data.
- I can decide when the registry makes sense to use and when not.
- PSR-15: Middlewares
This skill covers the PHP standard on middlewares.
Goals- I know what middlewares and request handlers are specified in PSR-15 and how they relate to each other.
- Request processing with middlewares
This skill covers the usage of PSR-15 middlewares in TYPO3 - both for frontend and backend request processing.
Goals- I understand how the core leverages middlewares to modularize request processing (middleware dispatcher, chained middlewares, …).
- I know how to find out which middlewares are configured and their order of execution.
- I can write my own middlewares and add them to the frontend and backend request processing.
- I can overwrite Core-provided middlewares.
- Route Enhancers
This skill covers route enhancers which are used to amend the URL routing provided by the TYPO3 core.
Goals- I know what Route Enhancers are and about the different types that the Core provides.
- Extending site configurations
This skill covers custom extensions to the TYPO3 Core Site configuration module.
Goals- I can add custom fields to the site configuration module.
- I know how to read values that are stored in custom site configuration fields.
- The USER/USER_INT TypoScript objects
This skill covers the USER and USER_INT TypoScript objects, which are used to integrate custom code in the TYPO3 frontend rendering process.
Goals- I know what the USER TypoScript object is and how it relates to plugins.
- I know the differences between USER and USER_INT.
- JavaScript Event API in the Backend
This skill covers the JavaScript API for Events in the TYPO3 Backend, relevant for programming custom backend modules and extending existing modules.
Goals- I know about the Event API in JavaScript
- I can register my own event listeners
- I know about the different event strategies and their performance implications
- I know about the different event classes and when to use which of them
- Providing own events
The focus of this skill is providing custom events within the TYPO3 PSR-14 implementation.
Goals- I can create events for my custom extensions and dispatch them with the Core’s EventDispatcher.
- I know how to implement the different event use cases specified in PSR-14
- Using existing PSR-14 events
This skill covers the implementation and usage of events in the TYPO3 Core.
Goals- I know how the TYPO3 Core defines events and attaches listeners to events.
- I can register my own listeners for events provided by the Core, extensions and 3rd-party PHP libraries.
- Debugging PSR-14 Event Handling
This skill covers debugging the registration, dispatching and handling of events.
Goals- I know how to retrieve a list of registered event listeners.
- I can use the admin panel to retrieve an overview of dispatched events.
- PSR-18: HTTP Client
This skill covers the PSR HTTP client standard.
Goals- I know about the client interface provided by PSR-18.
- PSR-17: HTTP Message Factories
This skill covers the PSR standard for HTTP message factories and the differences to the earlier HTTP request/response standard.
Goals- I know about the various interfaces provided by PSR-17 and their different purposes
- I know why PSR-17 was created and the differences to PSR-7
- Notification Actions
Notifications as flashmessages in backend can have actions assigned to interact with the editor.
Goals- I know the different types of actions for notifications.
- I know how to define javascript actions in notification messages.
- Backend Notifications
The focus of this skill is to know how to utilize notifications for backend users.
Goals- I know how to create notification messages in the TYPO3 backend.
- Pagination API
The abstraction for paginations provided by the TYPO3 Core.
Goals- I know how to apply pagination to result arrays.
- I know how to apply pagination to extbase query results
- I know the different types of pagination the Core provides.
- Rich Text Editor API
Modifying CKeditor’s configuration programmatically: You can modify existing or add complete new configurations
Goals- I know how to configure the Rich Text Editor in TYPO3.
- I know how to modify YAML configuration, programatically, using events.
- I know how to plug in a custom RTE.
- Building Custom Dashboard Widgets
This skill covers creating custom widgets for the TYPO3 Backend Dashboard and configuring existing widget groups.
Goals- I know which abstract classes and interfaces the core provides, to build my own custom widgets.
- I know how to register new widgets and how to assign them to one or several widget groups.
- I can also create new widget groups.
- I know how to create new DataProvider in order to compose new widgets based on existing widget implementations
- Custom Route Enhancers
This skill covers the creation of custom Route Enhancers for the TYPO3 frontend routing.
Goals- I know the difference between a Route Enhancer, a Decorator and a Mapper.
- I know how to implement a custom Route Enhancer.
- I can use my custom Route Enhancer for to route requests to my extension
- Database Record Translations
This skill covers the translation configuration of database records via TCA.
Goals- I can make records translatable.
- I know how to configure translation behavior of TCA columns.
- I am familiar with the different translation modes in relation fields (IRRE).
- PSR-11: Symfony Dependency Management/Injection
This skill covers different types of dependency injection in TYPO3 and the configuration of dependency injection.
Goals- I can configure my extension to make use of PSR-11 dependency injection.
- I know the different approaches to dependency injection in TYPO3.
- I can decide which classes can be or need to be public.
- I know how to debug problems with dependency injection.
- AssetCollector class and ViewHelpers
The AssetCollector class, its methods and the corresponding ViewHelpers.
Goals- I can add CSS and JavaScript files to my controllers and views.
- I know when and how to use the API, and when and how to use the f:asset.* ViewHelpers.
- TYPO3 Version API
The TYPO3 Version information API.
Goals- I know how to retrieve the major and branch version numbers of the current TYPO3 instance.
- Data structures in TYPO3 core
Classes for data structures, e.g., the BitSet and Enumeration class, and their usage.
Goals- I can decide in which cases to use the BitSet class, can explain the drawbacks and know how to use it properly.
- I understand how bit sets work in general.
- I know the use cases of the Enumeration class and the patterns to use for it.
- I know the use case of the TypeInterface and how to use it.
- Extension: Lowlevel
The lowlevel extension allows examining the current TYPO3 configuration.
Goals- I know which information the backend module of EXT:lowlevel provides.
- I can examine my configuration changes with the help of the EXT:lowlevel backend module.
- I know how to debug execution order of middlewares and event handlers with EXT:lowlevel.
- I know how to utilize the tools that EXT:lowlevel provides for managing my development instance.
- User-defined TCA type
This skill covers the TCA type “user”.
Goals- I know how to define a custom TCA field with custom rendering and behaviour
- I know the difference between the `user` type and a custom `renderType`
- TCA Types for record relations
This skill covers TCA configuration options to define relations to other records.
Goals- I know about TCA types that define record relations
- I know how to use `renderType` for those types to change appearance and behavior
- TCA types File and Folder
This skill covers the TCA types "file" and "folder", used for relations from records to files and folders.
Goals- I know about options to define relations from records to files/folders
- I know how to change appearance and behaviour of those relations
- TCA type "slug"
This skill covers the TCA type slug to create slugs for records.
Goals- I know how to define a field to integrate custom records into routing (TCA type slug)
- I know about `generatorOptions` to influence how the slug is generated
- TCA Types for Basic Input
This skill groups knowledge about TCA Types that define input possibilities.
Goals- I know how to define basic input fields by using TCA types
- I know how to change appearance and behavior of the fields by using renderTypes
- Special Input TCA Types
This skill covers specialized text input types in TCA.
Goals- I know about purpose defined special TCA types
- I know how to configure a basic TCA type to the same purpose
- I know how to change appearance and behavior by using 'fieldControl' technique.
- TYPO3 Message bus
This skill covers the TYPO3 message bus solution based on the Symfony Messenger component.
Goals- I know what the message bus is and how it works.
- I know how to create my own messages and send them over the bus.
- I know how to create handlers for messages and register them.
- I know why some messages should be handled asynchronously.
- Extending the Admin Panel
This skill covers implementing custom functionality for the Admin Panel.
Goals- I know how to display information in the Admin Panel panel bar.
- I know how to create a module for the Admin Panel.
- I know how to include custom CSS and JavaScript files for custom modules.
- I know how to add a custom setting to the Admin Panel and how to retrieve its value to influence my code's behaviour.
- Admin Panel usage as a developer
This skill handles the usage of the TYPO3 Admin Panel as an Extension Developer.
Goals- I can use the Admin Panel to check dispatched events.
- I can use the Admin Panel to check executed SQL Queries.
- I can use the Admin Panel to check the debug log.
- I can use the Admin Panel to check the request Info.
- Creating Backend modules
This skill covers the creation of custom backend modules for TYPO3.
Goals- I know how to register a backend module with controller actions.
- I know how to register a backend module with routes.
- I know which APIs to use to get a similar look and feel as the Core's backend modules.
- I know how to route to a backend module.
- I know how to retrieve current request info within a module.
- I know how to access backend module configuration.
- Extension File and Folder Structure
Knowing the file structure of an extension and where to place files by convention and due to technical requirements.
Goals- I know how the directory structure of a TYPO3 extension looks like and the additional Extbase conventions.
- I know the purposes of files in TYPO3 extensions (such as ext_emconf.php, ext_tables.php, and others).
- I can create an extension that is installable via the TYPO3 Extension Manager and/or Composer.
- Table Configuration Array (TCA)
Configuring database tables for usage in the backend and frontend.
Goals- I know about the different sections of the TCA (ctrl, columns, palettes, …).
- I know how to configure rendering of a table in backend forms.
- I know how the TCA controls information processing by the TYPO3 core (DataHandler).
- I know how the TCA is compiled from different extensions and cached.
- I can create a compliant TCA for my extensions.
- I can extend the TCA of existing tables from the core or other extensions.
- Database Schema Definition
This skill handles definition of own database tables and fields for an extension for automatic management by the TYPO3 Core.
Goals- I can write an ext_tables.sql file both for creating new and extending existing tables.
- I know which fields are generated automatically based on the TCA.
- What is SQL?
Knowledge about how to access and manipulate data in DBMS.
Goals- I know where to find information about SQL.
- I know how to issue queries against my local setup.
- Creating Scheduler Tasks and Commands
How to build Scheduler tasks and commands for automating recurring tasks.
Goals- I know how to create a new Scheduler task.
- I know how to create a new command.
- I know about the context Scheduler tasks are executed in.
- I know about the context commands are executed in.
- I know that commands can be executed as scheduler tasks.
- I know the differences between scheduler tasks and commands.
- Composer for TYPO3 Extensions
This skill introduces usage of Composer for extensions and their integration into TYPO3 projects.
Goals- I know which fields to use in the composer.json of my extension, what they mean and how they work, so that I can create working, readable and helpful composer.json files.
- I can use 3rd-party extensions and my own extensions in my site project via Composer.
- I also know the benefits and drawbacks of using Composer and can advise my coworkers and clients when to use which approach.
- In addition, I can build composer.json and ext_emconf.php files in such a way that their data is synchronized correctly.
- I know how to provide and access public assets in a composer installation.
- Also, I know how to update the autoloader data for non-Composer installations.
- JavaScript handling in the Backend
This skill covers the TYPO3-specific parts of RequireJS: how this library is used in TYPO3 and how developers can leverage the TYPO3 Core API to use their own JavaScript code in the TYPO3 Backend.
Goals- I know how to write JS code that is compatible with the TYPO3 backend.
- I know how to load my JS code via the PageRenderer.
- I know how to register custom JS namespaces in my extension.
- I can include and use third-party JS modules in my extension’s JS code.
- I know how to migrate legacy RequireJS modules to the ES6-based.
- AJAX handling in the TYPO3 Backend
Basic knowledge about how AJAX actions are handled in the TYPO3 Backend and how custom code can be added to be called via AJAX.
Goals- I can register routes for backend AJAX calls.
- I know how to process incoming AJAX requests in PHP.
- I can execute AJAX requests in JavaScript.
- Implementing upgrade wizards
This skill covers the implementation of upgrade wizards, which can be used by integrators to update existing extension data and configuration after upgrading the extension.
Goals- I can implement an update wizard and know when to use it.
- PHP autoloading standards
The different PHP autoloading standards (PSR-4, class maps), how they map PHP classes to files and folders, and how the PSR-4 autoloading is configured.
Goals- I know where to place the class file for a certain class in a certain namespace when using PSR-4 autoloading.
- I can set up a proper PSR-4 autoloading configuration.
- I know how to debug and solve problems related to autoloading.
- Making Extensions localizable
How to make extensions translatable and localizable.
Goals- I know conventions for language file names and file paths in TYPO3.
- I know the basics of the translation concept of TYPO3.
- I can translate labels in Fluid (f:translate ViewHelper).
- I can provide translatable TCA and Flexform labels.
- Coding Standards in TYPO3
Knowing how to write code conforming to the coding standards used by the TYPO3 project.
Goals- I am familiar with the PSR standard and the usage in TYPO3.
- I know the TYPO3 namespace conventions.
- I know the official TYPO3 coding guidelines for PHP, JavaScript, etc.
- Docblocks in PHP
The syntax and general purpose of documentation blocks, and the most often used annotations.
Goals- I know how PHPDoc blocks look and I know the general purpose and limitations.
- I can write valid annotations.
- Performance analysis for custom code
This skill covers the process of analysing performance of a TYPO3 system.
Goals- I know common performance metrics
- I know how to analyze the performance of a TYPO3 site
- I know how to analyze the performance of my custom plugins
- I know where to get a first overview of the rendering performance
- PHP Code Style Tools
This skill covers tools for automatic code formatting in PHP.
Goals- I know about standard tools for code formatting in PHP.
- I know how to use the tools.
- I know how to integrate the tools into workflows like CI Pipelines.
- Static code analysis
Developing and maintaining large code bases can be cumbersome. Tools providing static code analysis can help.
Goals- I know what static code analysis is and why it is useful.
- I know how to integrate static analysis tools into workflows.
- I know some popular and widely used static analysis tools for PHP
- Implementing MVC in TYPO3
Introducing the concept of MVC in Extbase: base classes for models, controllers, repositories; the concept of services and utilities and when to use them.
Goals- I know which kinds of models exist in Extbase.
- I know how a repository for a model is implemented.
- I know how plugins relate to controllers and actions.
- I know how TYPO3/Extbase determines a template for a controller action.
- I can create a new plugin with one or multiple controllers.
- I can define templates for my controller actions.
- I can create a model and the related repository.
- Implementing ViewHelpers
Provides the foundations for using custom PHP code in a Fluid-based view.
Goals- I know which base classes for ViewHelpers exist.
- I know which functionality should be placed in a ViewHelper and what is better suited for a controller, service or utility.
- I can create my own ViewHelpers and use them in a template.
- I can register custom ViewHelper arguments.
- I can implement a custom conditional ViewHelper.
- Extbase Request/Response
How requests are handled by Extbase.
Goals- I know how an Extbase request relates to the TYPO3 page rendering process.
- I know how Extbase namespaces its arguments.
- I know the difference between forwards and redirects.
- I can extract arguments from the request data.
- I can add custom data to a response in my controller actions.
- Extbase View
Explaining the view part of MVC in Extbase.
Goals- I know how data is passed to the view.
- I know how a view is configured in a controller.
- I know how different types of views can be used.
- I can pass variables to my template.
- Extending Base Models
This skill covers the use cases and different ways to extend the built-in models of Extbase.
Goals- I know which models are shipped with Extbase by default.
- I know when to use which default model as a base for own models.
- I know how to map database fields to properties using PHP configuration (fieldName).
- Extbase Persistence
How Extbase interacts with the permanent storage.
Goals- I know how Extbase works when it stores and retrieves persistent data.
- I know the lifecycle of an object.
- Extbase PersistenceManager
The built-in PersistenceManager.
Goals- I am familiar with the PersistenceManager class.
- I know when to use the class to manually trigger I/O operations.
- I know at what point the PersistenceManager is triggered to automatically persist data.
- Standard Extbase Repository
Knowing the default Repository class shipped with Extbase.
Goals- I know which default query methods are shipped.
- I know which restrictions apply to queries by default.
- I know how to create a repository based on the default Repository class
- Customizing Extbase Repositories
How to implement custom persistence functionality in Extbase.
Goals- I know how to apply customized query settings to all repository queries.
- I know how to manipulate query settings for a specific method.
- I know the difference between Extbase and Doctrine queries.
- I can create custom queries using the Extbase mechanisms.
- Validation in Extbase
What concepts exist to validate controller action input parameters.
Goals- I know about annotations to validate model properties.
- I know what input parameter validation is automatically applied to controller actions.
- I know about annotated validations for controller actions.
- Implementing Custom Validators
How to provide custom data validation in Extbase.
Goals- I know which classes I can use as a base for my validator.
- I know where to put a custom validator class by convention and how to register the class.
- I know in which location a custom validator class should be stored by convention and how to register the class.
- I know how to use the validator in a controller action.
- Error Actions
How to handle validation errors.
Goals- I know about the built-in error action, how it works and when it is used.
- I know how to provide a custom error action by overriding the default.
- Controller
This skill covers controllers, the "C" in the MVC pattern.
GoalsI know which role controllers play in the pattern.
- Extbase Annotations
This skill is about PHPDoc annotations particular to Extbase.
Goals- I can use the correct Extbase annotations in my models and controllers.
- I know which annotation I should use when several possible options are available.
- Registering Backend Modules
This skill covers the registration of a backend module to make it available to users.
Goals- I can register backend modules based on Extbase.
- I can register backend modules without Extbase.
- Registering Frontend Plugins
This skill covers the registration of a frontend plugin to make it available to users.
Goals- I know how to register a plugin with and without Extbase.
- I know how to register a plugin/controller as a content element.
- I know how to declare actions as uncached in Extbase.
- I know how to register a cached or uncached plugin without Extbase.
- EXTBASEPLUGIN TypoScript Object
This skill covers the integration of Extbase plugins into rendering via TypoScript.
Goals- I can call an Extbase plugin via an EXTBASEPLUGIN TypoScript cObject.
- I know how caching works with EXTBASEPLUGIN.
- Handling User Input
Knowledge about possible ways to retrieve and process user input.
Goals- I know how to access the arguments and values of a URL.
- I know how to access data passed into the system from forms.
- I know how to retrieve data from third-party systems.
- I know the typical security risks when user input is accessed/processed.
- User Input in DB Queries
Knowledge about securely processing user input for database queries.
Goals- I know what an SQL injection is.
- I know how to sanitize user input to prevent SQL injections.
- I know what other measures to take against SQL injections.
- User Input in Views
Knowledge about securely outputting values gained through user input.
Goals- I know what cross-site scripting (XSS) is.
- I know how to prevent user input from triggering XSS.
- User Input in PHP Code
Knowledge about securely processing user input in PHP code.
Goals- I know about vulnerabilities path traversal, arbitrary code execution and information disclosure.
- I can apply mitigations to prevent these vulnerabilities.
- Web Vulnerability Types
Knowledge about possible vulnerabilities in web development.
Goals- I know what cross-site scripting (XSS) is.
- I know what arbitrary code execution is.
- I know what an SQL injection is.
- I know how I can prevent these vulnerabilities in my code.
- Prepared Statements
This skill covers the concept of Prepared Statements in relational databases.
Goals- I know what prepared statements are and what their purpose is
- I know how they improve security and against which attack vectors they are useful.
- Content Security Policy in Extensions
This skill covers the usage and configuration of CSP in TYPO3 Extension.
Goals- I know how to configure CSP via PHP
- I know how to integrate assets in a CSP conform way
- I know to make use of 3rd Party assets in a CSP conform way
- Composer
Composer basics and its usage for PHP projects.
GoalsI know
- what Composer is
- the purpose and the structure of file composer.json
- what composer.lock is and which purpose it serves
- the difference between the install and the update command
I can
- create a new Composer project
- specify requirements for my project
- install packages using Composer
- update packages
- remove packages
- Git basics
Basics and most important commands for working with the version-control system Git.
GoalsI know
- what a VCS is
- what a branch is
- what a tag is
- what a repository is
- what a merge is
I can
- initialize a Git repository
- execute commands "commit", "push" and "pull"
- create a branch and work on it
- assign a tag to a certain development state
- merge code