NodeFactory

Create an element object depending on renderType.

This is the main factory to instantiate any node within the render chain of FormEngine. All nodes must implement NodeInterface.

Nodes are "container" classes of the render chain, "element" classes that render single elements, as well as "fieldWizard", "fieldInformation" and "fieldControl" classes which are called by single elements to enrich them.

This factory gets a string "renderType" and then looks up in a list which specific class should handle this renderType. This list can be extended with own renderTypes by extensions, existing renderTypes can be overridden, and

  • for complex cases - it is possible to register own resolver classes for single renderTypes that can return a node class name to override the default lookup list.
Tags
todo:

Declare final in v13.

Table of Contents

Properties

$nodeResolver  : array<string|int, mixed>
Node resolver classes Nested array with nodeName as key, (sorted) priority as sub key and class as value
$nodeTypes  : array<string|int, mixed>
Default registry of node name to handling class

Methods

__construct()  : mixed
Set up factory. Initialize additionally registered nodes.
create()  : NodeInterface
Create a node depending on type
initializeNodeClass()  : NodeInterface
Instantiate a NodeInterface class and set data.
initializeNodeResolverClass()  : NodeResolverInterface
Instantiate a NodeResolverInterface class and set data.
registerAdditionalNodeTypesFromConfiguration()  : void
Add node types from nodeRegistry to $this->nodeTypes.
registerNodeResolvers()  : void
Add resolver and add them sorted to a local property.

Properties

$nodeResolver

Node resolver classes Nested array with nodeName as key, (sorted) priority as sub key and class as value

protected array<string|int, mixed> $nodeResolver = []

$nodeTypes

Default registry of node name to handling class

protected array<string|int, mixed> $nodeTypes = [ // Default container classes 'flex' => \TYPO3\CMS\Backend\Form\Container\FlexFormEntryContainer::class, 'flexFormContainerContainer' => \TYPO3\CMS\Backend\Form\Container\FlexFormContainerContainer::class, 'flexFormElementContainer' => \TYPO3\CMS\Backend\Form\Container\FlexFormElementContainer::class, 'flexFormNoTabsContainer' => \TYPO3\CMS\Backend\Form\Container\FlexFormNoTabsContainer::class, 'flexFormSectionContainer' => \TYPO3\CMS\Backend\Form\Container\FlexFormSectionContainer::class, 'flexFormTabsContainer' => \TYPO3\CMS\Backend\Form\Container\FlexFormTabsContainer::class, 'fullRecordContainer' => \TYPO3\CMS\Backend\Form\Container\FullRecordContainer::class, 'inline' => \TYPO3\CMS\Backend\Form\Container\InlineControlContainer::class, 'inlineRecordContainer' => \TYPO3\CMS\Backend\Form\Container\InlineRecordContainer::class, \TYPO3\CMS\Backend\Form\Container\FilesControlContainer::NODE_TYPE_IDENTIFIER => \TYPO3\CMS\Backend\Form\Container\FilesControlContainer::class, \TYPO3\CMS\Backend\Form\Container\FileReferenceContainer::NODE_TYPE_IDENTIFIER => \TYPO3\CMS\Backend\Form\Container\FileReferenceContainer::class, 'siteLanguage' => \TYPO3\CMS\Backend\Form\Container\SiteLanguageContainer::class, 'listOfFieldsContainer' => \TYPO3\CMS\Backend\Form\Container\ListOfFieldsContainer::class, 'noTabsContainer' => \TYPO3\CMS\Backend\Form\Container\NoTabsContainer::class, 'outerWrapContainer' => \TYPO3\CMS\Backend\Form\Container\OuterWrapContainer::class, 'paletteAndSingleContainer' => \TYPO3\CMS\Backend\Form\Container\PaletteAndSingleContainer::class, 'singleFieldContainer' => \TYPO3\CMS\Backend\Form\Container\SingleFieldContainer::class, 'tabsContainer' => \TYPO3\CMS\Backend\Form\Container\TabsContainer::class, // Default single element classes 'check' => \TYPO3\CMS\Backend\Form\Element\CheckboxElement::class, 'checkboxToggle' => \TYPO3\CMS\Backend\Form\Element\CheckboxToggleElement::class, 'checkboxLabeledToggle' => \TYPO3\CMS\Backend\Form\Element\CheckboxLabeledToggleElement::class, 'email' => \TYPO3\CMS\Backend\Form\Element\EmailElement::class, 'group' => \TYPO3\CMS\Backend\Form\Element\GroupElement::class, 'folder' => \TYPO3\CMS\Backend\Form\Element\FolderElement::class, 'input' => \TYPO3\CMS\Backend\Form\Element\InputTextElement::class, 'number' => \TYPO3\CMS\Backend\Form\Element\NumberElement::class, 'datetime' => \TYPO3\CMS\Backend\Form\Element\DatetimeElement::class, 'link' => \TYPO3\CMS\Backend\Form\Element\LinkElement::class, 'password' => \TYPO3\CMS\Backend\Form\Element\PasswordElement::class, 'hidden' => \TYPO3\CMS\Backend\Form\Element\InputHiddenElement::class, 'imageManipulation' => \TYPO3\CMS\Backend\Form\Element\ImageManipulationElement::class, 'none' => \TYPO3\CMS\Backend\Form\Element\NoneElement::class, 'radio' => \TYPO3\CMS\Backend\Form\Element\RadioElement::class, 'selectCheckBox' => \TYPO3\CMS\Backend\Form\Element\SelectCheckBoxElement::class, 'selectMultipleSideBySide' => \TYPO3\CMS\Backend\Form\Element\SelectMultipleSideBySideElement::class, 'selectTree' => \TYPO3\CMS\Backend\Form\Element\SelectTreeElement::class, 'selectSingle' => \TYPO3\CMS\Backend\Form\Element\SelectSingleElement::class, 'selectSingleBox' => \TYPO3\CMS\Backend\Form\Element\SelectSingleBoxElement::class, 'color' => \TYPO3\CMS\Backend\Form\Element\ColorElement::class, // t3editor is defined with a fallback so extensions can use it even if ext:t3editor is not loaded 't3editor' => \TYPO3\CMS\Backend\Form\Element\TextElement::class, 'text' => \TYPO3\CMS\Backend\Form\Element\TextElement::class, 'textTable' => \TYPO3\CMS\Backend\Form\Element\TextTableElement::class, 'unknown' => \TYPO3\CMS\Backend\Form\Element\UnknownElement::class, 'user' => \TYPO3\CMS\Backend\Form\Element\UserElement::class, // special renderType for type="user" on sys_file_storage is_public column 'userSysFileStorageIsPublic' => \TYPO3\CMS\Backend\Form\Element\UserSysFileStorageIsPublicElement::class, 'fileInfo' => \TYPO3\CMS\Backend\Form\Element\FileInfoElement::class, 'mfaInfo' => \TYPO3\CMS\Backend\Form\Element\MfaInfoElement::class, 'slug' => \TYPO3\CMS\Backend\Form\Element\InputSlugElement::class, 'language' => \TYPO3\CMS\Backend\Form\Element\SelectSingleElement::class, 'category' => \TYPO3\CMS\Backend\Form\Element\CategoryElement::class, 'passthrough' => \TYPO3\CMS\Backend\Form\Element\PassThroughElement::class, 'belayoutwizard' => \TYPO3\CMS\Backend\Form\Element\BackendLayoutWizardElement::class, 'json' => \TYPO3\CMS\Backend\Form\Element\JsonElement::class, 'uuid' => \TYPO3\CMS\Backend\Form\Element\UuidElement::class, // Default classes to enrich single elements 'fieldControl' => \TYPO3\CMS\Backend\Form\NodeExpansion\FieldControl::class, 'fieldInformation' => \TYPO3\CMS\Backend\Form\NodeExpansion\FieldInformation::class, 'fieldWizard' => \TYPO3\CMS\Backend\Form\NodeExpansion\FieldWizard::class, // Element information 'tcaDescription' => \TYPO3\CMS\Backend\Form\FieldInformation\TcaDescription::class, 'adminIsSystemMaintainer' => \TYPO3\CMS\Backend\Form\FieldInformation\AdminIsSystemMaintainer::class, 'backendLayoutFromParentPage' => \TYPO3\CMS\Backend\Form\FieldInformation\BackendLayoutFromParentPage::class, // Element wizards 'defaultLanguageDifferences' => \TYPO3\CMS\Backend\Form\FieldWizard\DefaultLanguageDifferences::class, 'localizationStateSelector' => \TYPO3\CMS\Backend\Form\FieldWizard\LocalizationStateSelector::class, 'otherLanguageContent' => \TYPO3\CMS\Backend\Form\FieldWizard\OtherLanguageContent::class, 'otherLanguageThumbnails' => \TYPO3\CMS\Backend\Form\FieldWizard\OtherLanguageThumbnails::class, 'recordsOverview' => \TYPO3\CMS\Backend\Form\FieldWizard\RecordsOverview::class, 'selectIcons' => \TYPO3\CMS\Backend\Form\FieldWizard\SelectIcons::class, 'tableList' => \TYPO3\CMS\Backend\Form\FieldWizard\TableList::class, // Element controls 'addRecord' => \TYPO3\CMS\Backend\Form\FieldControl\AddRecord::class, 'editPopup' => \TYPO3\CMS\Backend\Form\FieldControl\EditPopup::class, 'elementBrowser' => \TYPO3\CMS\Backend\Form\FieldControl\ElementBrowser::class, 'insertClipboard' => \TYPO3\CMS\Backend\Form\FieldControl\InsertClipboard::class, 'linkPopup' => \TYPO3\CMS\Backend\Form\FieldControl\LinkPopup::class, 'listModule' => \TYPO3\CMS\Backend\Form\FieldControl\ListModule::class, 'resetSelection' => \TYPO3\CMS\Backend\Form\FieldControl\ResetSelection::class, 'passwordGenerator' => \TYPO3\CMS\Backend\Form\FieldControl\PasswordGenerator::class, ]

Methods

__construct()

Set up factory. Initialize additionally registered nodes.

public __construct() : mixed

create()

Create a node depending on type

public create(array<string|int, mixed> $data) : NodeInterface
Parameters
$data : array<string|int, mixed>

All information to decide which class should be instantiated and given down to sub nodes

Tags
throws
Exception
Return values
NodeInterface

initializeNodeClass()

Instantiate a NodeInterface class and set data.

protected initializeNodeClass(string $className, array<string|int, mixed> $data) : NodeInterface
Parameters
$className : string
$data : array<string|int, mixed>

Main data array

Return values
NodeInterface

initializeNodeResolverClass()

Instantiate a NodeResolverInterface class and set data.

protected initializeNodeResolverClass(string $className, array<string|int, mixed> $data) : NodeResolverInterface
Parameters
$className : string
$data : array<string|int, mixed>

Main data array

Return values
NodeResolverInterface

registerAdditionalNodeTypesFromConfiguration()

Add node types from nodeRegistry to $this->nodeTypes.

protected registerAdditionalNodeTypesFromConfiguration() : void

This can be used to add new render types or to overwrite existing node types. The registered class must implement the NodeInterface and will be called if a node with this renderType is rendered.

Tags
throws
Exception

if configuration is incomplete or two nodes with identical priorities are registered

registerNodeResolvers()

Add resolver and add them sorted to a local property.

protected registerNodeResolvers() : void

This can be used to manipulate the nodeName to class resolution with own code.

Tags
throws
Exception

if configuration is incomplete or two resolver with identical priorities are registered


        
On this page

Search results