[FOLLOWUP][TASK] EXT:form - change signal slots to hooks
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Documentation / Changelog / master / Important-80301-ExtFormCleanupAndCallbackMigration.rst
1 .. include:: ../../Includes.txt
2
3 ===========================================================
4 Important: #80301 - EXT:form - Cleanup / callback migration
5 ===========================================================
6
7 See :issue:`80301`
8
9 Description
10 ===========
11
12 The callback 'onBuildingFinished' is deprecated and will be removed in TYPO3 v9.
13 --------------------------------------------------------------------------------
14
15 Use the new hook 'afterBuildingFinished' instead.
16
17 Connect to the hook:
18
19 .. code-block:: php
20
21     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['afterBuildingFinished'][]
22         = \VENDOR\YourNamespace\YourClass::class;
23
24 Use the hook:
25
26 .. code-block:: php
27
28     /**
29      * @param \TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable
30      * @return void
31      */
32     public function afterBuildingFinished(\TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable)
33     {
34     }
35
36
37 This hook will be called for each renderable.
38
39
40 The callback 'beforeRendering' is deprecated and will be removed in TYPO3 v9.
41 -----------------------------------------------------------------------------
42
43 Use the new hook 'beforeRendering' instead.
44
45 Connect to the hook:
46
47 .. code-block:: php
48
49     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeRendering'][]
50         = \VENDOR\YourNamespace\YourClass::class;
51
52 Use the signal:
53
54 .. code-block:: php
55
56     /**
57      * @param \TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime
58      * @param \TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface $renderable
59      * @return void
60      */
61     public function beforeRendering(\TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime, \TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface $renderable)
62     {
63     }
64
65
66 This hook will be called for each renderable.
67
68
69 The callback 'onSubmit' is deprecated and will be removed in TYPO3 v9.
70 ----------------------------------------------------------------------
71
72 Use the new hook 'afterSubmit' instead.
73
74 Connect to the hook:
75
76 .. code-block:: php
77
78     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['afterSubmit'][]
79         = \VENDOR\YourNamespace\YourClass::class;
80
81 Use the hook:
82
83 .. code-block:: php
84
85     /**
86      * @param \TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime
87      * @param \TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable
88      * @param mixed $elementValue submitted value of the element *before post processing*
89      * @param array $requestArguments submitted raw request values
90      * @return void
91      */
92     public function onSubmit(\TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime, \TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable, $elementValue, array $requestArguments = [])
93     {
94         return $elementValue;
95     }
96
97
98 This hook will be called for each renderable.
99
100
101 The callback 'initializeFormElement' call the 'initializeFormElement' hook.
102 ---------------------------------------------------------------------------
103
104 Connect to the hook:
105
106 .. code-block:: php
107
108     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['initializeFormElement'][]
109         = \VENDOR\YourNamespace\YourClass::class;
110
111 Use the hook:
112
113 .. code-block:: php
114
115     /**
116      * @param \TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable
117      * @return void
118      */
119     public function initializeFormElement(\TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable)
120     {
121     }
122
123
124 This enables you to override the 'initializeFormElement' method within your custom implementation class.
125 If you do not call the parents 'initializeFormElement' then no hook will be thrown.
126 Furthermore, you can connect to the hook and initialize the generic form elements without defining a
127 custom implementaion to access the 'initializeFormElement' method.
128 You only need a class which connects to this hook. Then detect the form element you wish to initialize.
129 This saves you a lot of configuration!
130
131
132 The hook 'beforeRemoveFromParentRenderable' will be called for each renderable.
133 -------------------------------------------------------------------------------
134
135 Connect to the hook:
136
137 .. code-block:: php
138
139     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeRemoveFromParentRenderable'][]
140         = \VENDOR\YourNamespace\YourClass::class;
141
142 Use the hook:
143
144 .. code-block:: php
145
146     /**
147      * @param \TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable
148      * @return void
149      */
150     public function beforeRemoveFromParentRenderable(\TYPO3\CMS\Form\Domain\Model\Renderable\RenderableInterface $renderable)
151     {
152     }
153
154
155 The hook 'afterInitializeCurrentPage' will be called after a page is initialized.
156 ---------------------------------------------------------------------------------
157
158 Connect to the hook:
159
160 .. code-block:: php
161
162     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['afterInitializeCurrentPage'][]
163         = \VENDOR\YourNamespace\YourClass::class;
164
165 Use the hook:
166
167 .. code-block:: php
168
169     /**
170      * @param \TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime
171      * @param \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $currentPage
172      * @param null|\TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $lastPage
173      * @param mixed $elementValue submitted value of the element *before post processing*
174      * @return \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface
175      */
176     public function afterInitializeCurrentPage(\TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime, \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $currentPage, \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $lastPage = null, array $requestArguments = []): CompositeRenderableInterface
177     {
178         return $currentPage;
179     }
180
181
182 The form manager call the 'beforeFormCreate' hook.
183 --------------------------------------------------
184
185 Connect to the hook:
186
187 .. code-block:: php
188
189     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeFormCreate'][]
190         = \VENDOR\YourNamespace\YourClass::class;
191
192 Use the hook:
193
194 .. code-block:: php
195
196     /**
197      * @param string $formPersistenceIdentifier
198      * @param array $formDefinition
199      * @return array
200      */
201     public function beforeFormCreate(string $formPersistenceIdentifier, array $formDefinition): array
202     {
203         return $formDefinition;
204     }
205
206
207 The form manager call the 'beforeFormDuplicate' hook.
208 -----------------------------------------------------
209
210 Connect to the hook:
211
212 .. code-block:: php
213
214     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeFormDuplicate'][]
215         = \VENDOR\YourNamespace\YourClass::class;
216
217 Use the hook:
218
219 .. code-block:: php
220
221     /**
222      * @param string $formPersistenceIdentifier
223      * @param array $formDefinition
224      * @return array
225      */
226     public function beforeFormDuplicate(string $formPersistenceIdentifier, array $formDefinition): array
227     {
228         return $formDefinition;
229     }
230
231
232 The form manager call the 'beforeFormDelete' hook.
233 --------------------------------------------------
234
235 Connect to the hook:
236
237 .. code-block:: php
238
239     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeFormDelete'][]
240         = \VENDOR\YourNamespace\YourClass::class;
241
242 Use the signal:
243
244 .. code-block:: php
245
246     /**
247      * @param string $formPersistenceIdentifier
248      * @return void
249      */
250     public function beforeFormDelete(string $formPersistenceIdentifier)
251     {
252     }
253
254
255 The form editor call the 'beforeFormSave' hook.
256 -----------------------------------------------
257
258 Connect to the hook:
259
260 .. code-block:: php
261
262     $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['beforeFormSave'][]
263         = \VENDOR\YourNamespace\YourClass::class;
264
265 Use the hook:
266
267 .. code-block:: php
268
269     /**
270      * @param string $formPersistenceIdentifier
271      * @param array $formDefinition
272      * @return array
273      */
274     public function beforeFormSave(string $formPersistenceIdentifier, array $formDefinition): array
275     {
276         return $formDefinition;
277     }
278
279
280 New form element property: properties.fluidAdditionalAttributes
281 ---------------------------------------------------------------
282
283 In order to deal with fluid ViewHelpers 'additionalAttributes' it is necessary to introduce a new configuration scope "properties.fluidAdditionalAttributes" for each form element.
284 This configuration property will be used to fill the fluid ViewHelper property "additionalAttributes".
285
286
287 .. index:: Frontend, Backend, ext:form