[TASK] Allow customData in FormEngine data compiler 34/51634/2
authorAndreas Fernandez <a.fernandez@scripting-base.de>
Sat, 11 Feb 2017 13:42:09 +0000 (14:42 +0100)
committerAndreas Fernandez <typo3@scripting-base.de>
Sat, 11 Feb 2017 13:48:48 +0000 (14:48 +0100)
FormEngine is a two-fold process: First all dependent data is
compiled into main "data array" by data providers, then the render
engine uses this array to render forms.

The main data array is restricted, top level keys can not be added
or removed by single data providers.

With the recent refactorings on element level, it is now much easier
to create powerful extensions to single elements. Those may need
additional data, the rest of the FormEngine doesn't know about.

To allow custom data providers adding data that is not related
to other keys from the data array, a general "customData" is
introduced to the array. This is not filled nor used by core
related classes, but it can be used by extensions to park data here.

For v9, we will probably see another patch giving the form data groups
control about the data array structure, but that may follow later.
For v8 and v7, allowing custom data should solve the one or
the other data provider usage for now.

Change-Id: I8e88ec8f9e55eed7fc4a58590cbb5ead19baaae3
Resolves: #79747
Releases: master, 7.6
Reviewed-on: https://review.typo3.org/51634
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Tested-by: Andreas Fernandez <typo3@scripting-base.de>
typo3/sysext/backend/Classes/Form/FormDataCompiler.php

index 24fff34..99dcdd2 100644 (file)
@@ -273,6 +273,12 @@ class FormDataCompiler
             // This array of fields will be set as hidden-fields instead of rendered normally!
             // This is used by EditDocumentController to force some field values if set as "overrideVals" in _GP
             'overrideValues' => [],
+
+            // A place for non-core, additional, custom data providers to add data. If a data provider needs to add
+            // additional data to the data array that doesn't fit elsewhere, it can place it here to use it in the
+            // render part again. Data in here should be namespaced in a way that it does not collide with other
+            // data providers adding further data here. Using the extension key as array key could be a good idea.
+            'customData' => [],
         ];
     }
 }