44
55use Linio \DynamicFormBundle \DataProvider ;
66use Linio \DynamicFormBundle \Exception \NonExistentFormException ;
7+ use Linio \DynamicFormBundle \Exception \NotExistentDataProviderException ;
8+ use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
79use Symfony \Component \Form \FormBuilderInterface ;
810use Symfony \Component \Form \FormFactory as SymfonyFormFactory ;
911use Symfony \Component \Form \FormInterface ;
@@ -25,6 +27,11 @@ class FormFactory
2527 */
2628 protected $ dataProviders = [];
2729
30+ /**
31+ * @var array
32+ */
33+ protected $ eventSubscribers = [];
34+
2835 /**
2936 * @param SymfonyFormFactory $formFactory
3037 */
@@ -50,6 +57,19 @@ public function addDataProvider($alias, DataProvider $dataProvider)
5057 $ this ->dataProviders [$ alias ] = $ dataProvider ;
5158 }
5259
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+
5373 /**
5474 * @param string $key The key of the Form in the form configuration
5575 * @param array $data
@@ -83,6 +103,12 @@ public function createBuilder($key, $data = [], $options = [], $name = null)
83103
84104 $ formBuilder = $ this ->formFactory ->createNamedBuilder ($ name ?: $ key , 'form ' , $ data , $ options );
85105
106+ if (isset ($ this ->eventSubscribers [$ key ])) {
107+ foreach ($ this ->eventSubscribers [$ key ] as $ eventSubscriber ) {
108+ $ formBuilder ->addEventSubscriber ($ eventSubscriber );
109+ }
110+ }
111+
86112 foreach ($ this ->configuration [$ key ] as $ key => $ fieldConfiguration ) {
87113 if (!$ fieldConfiguration ['enabled ' ]) {
88114 continue ;
@@ -129,6 +155,8 @@ public function createBuilder($key, $data = [], $options = [], $name = null)
129155 * @param string $alias
130156 *
131157 * @return DataProvider
158+ *
159+ * @throws NotExistentDataProviderException
132160 */
133161 public function loadDataProvider ($ alias )
134162 {
0 commit comments