.. index:: ! Extension points, ! Public API .. _developers-extension-points: ================ Extension points ================ This page is the contract between the academic extensions and the code of a project. It covers every academic extension and :guilabel:`category_types`, and it is a complete list: what it names is public API, and what it does not name is not. Every class, interface, trait and enum listed here carries the :php:`@api` tag in its docblock, so the promise is visible in the code as well. A test of the extensions' own repository makes sure the tags and this page name the same classes. .. contents:: :local: :depth: 1 .. _developers-extension-points-promise: What the promise means ====================== Public API does not change silently. A release that breaks or deprecates anything listed on this page says so in the changelog of the extension: * a :guilabel:`Breaking` entry when existing code stops working, with the migration; * a :guilabel:`Deprecation` entry when the old way keeps working until the next major version, and says what replaces it. Anything else may change in any release, a bugfix release included, and without a changelog entry. Code that relies on it has to be checked on every update. .. _developers-extension-points-api: What is public API ================== * The :ref:`events `, and the :ref:`types they hand to a listener `. * The :ref:`interfaces `. * The :ref:`services and classes ` a project names in its configuration or its code. * The :ref:`base class ` of a profile factory. * The two :ref:`traits ` of :guilabel:`academic_base` for Extbase controllers. * The :ref:`domain models `: their public getters, which the templates read, and extending them to add fields. * Templates, partials and sections: their paths below :file:`Resources/Private/`, the names of their sections, the variables they receive, and the ViewHelpers they call, by tag name and arguments. The :guilabel:`Templates` chapter of each extension describes how to override them. * Settings: the site settings of the site sets, the TypoScript constants and settings, and the settings of the content elements. * The TypoScript and page TSconfig keys the extensions document. * The keys of the language files, which a site overrides labels by. * The identifiers ``academic-persons/apply-settings-to-tca`` and ``academic-jobs/apply-settings-to-tca`` of the listeners that apply the persons and the jobs settings to the compiled TCA, so that a listener of :php:`TYPO3\CMS\Core\Configuration\Event\AfterTcaCompilationEvent` can be ordered after them. The listener classes are not public API. * The format of :file:`Configuration/CategoryTypes.yaml`, see the `category types chapter of category_types `__. * The routing aspect type ``CategoryFilterMapper`` of :guilabel:`category_types` and its settings, see the `routing chapter of category_types `__. The class behind it is not public API. * The format of :file:`Configuration/FrontendIcons.php`, the frontend icon registry of :guilabel:`academic_base`: the format of :file:`Configuration/Icons.php`, read from every active package, and a package loaded later replaces an identifier, see :ref:`configuration-frontend-icons`. * The view helper ``icon`` of :guilabel:`academic_base`, in the namespace ``http://typo3.org/ns/FGTCLB/AcademicBase/ViewHelpers``, by tag name and arguments, which renders an icon of the frontend icon registry, and the identifier ``default-not-found`` of the icon it renders for an unknown identifier. The class behind it is not public API. * The view helper ``frontendIconMap`` of :guilabel:`academic_base`, in the same namespace, by tag name and arguments, and the JSON data block it renders: the element :html:`