4
4
5
5
use Linio \DynamicFormBundle \DataProvider ;
6
6
use Linio \DynamicFormBundle \Exception \NonExistentFormException ;
7
+ use Linio \DynamicFormBundle \Exception \NotExistentDataProviderException ;
8
+ use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
7
9
use Symfony \Component \Form \FormBuilderInterface ;
8
10
use Symfony \Component \Form \FormFactory as SymfonyFormFactory ;
9
11
use Symfony \Component \Form \FormInterface ;
@@ -25,6 +27,11 @@ class FormFactory
25
27
*/
26
28
protected $ dataProviders = [];
27
29
30
+ /**
31
+ * @var array
32
+ */
33
+ protected $ eventSubscribers = [];
34
+
28
35
/**
29
36
* @param SymfonyFormFactory $formFactory
30
37
*/
@@ -50,6 +57,19 @@ public function addDataProvider($alias, DataProvider $dataProvider)
50
57
$ this ->dataProviders [$ alias ] = $ dataProvider ;
51
58
}
52
59
60
+ /**
61
+ * @param string $formName
62
+ * @param EventSubscriberInterface $eventSubscriber
63
+ */
64
+ public function addEventSubscriber ($ formName , EventSubscriberInterface $ eventSubscriber )
65
+ {
66
+ if (!isset ($ this ->eventSubscribers [$ formName ])) {
67
+ $ this ->eventSubscribers [$ formName ] = [];
68
+ }
69
+
70
+ $ this ->eventSubscribers [$ formName ][] = $ eventSubscriber ;
71
+ }
72
+
53
73
/**
54
74
* @param string $key The key of the Form in the form configuration
55
75
* @param array $data
@@ -83,6 +103,12 @@ public function createBuilder($key, $data = [], $options = [], $name = null)
83
103
84
104
$ formBuilder = $ this ->formFactory ->createNamedBuilder ($ name ?: $ key , 'form ' , $ data , $ options );
85
105
106
+ if (isset ($ this ->eventSubscribers [$ key ])) {
107
+ foreach ($ this ->eventSubscribers [$ key ] as $ eventSubscriber ) {
108
+ $ formBuilder ->addEventSubscriber ($ eventSubscriber );
109
+ }
110
+ }
111
+
86
112
foreach ($ this ->configuration [$ key ] as $ key => $ fieldConfiguration ) {
87
113
if (!$ fieldConfiguration ['enabled ' ]) {
88
114
continue ;
@@ -129,6 +155,8 @@ public function createBuilder($key, $data = [], $options = [], $name = null)
129
155
* @param string $alias
130
156
*
131
157
* @return DataProvider
158
+ *
159
+ * @throws NotExistentDataProviderException
132
160
*/
133
161
public function loadDataProvider ($ alias )
134
162
{
0 commit comments