Skip to content

Commit fc32241

Browse files
author
Harrison Heck
committed
Merge pull request #9 from xurumelous/master
Added the ability to attach event subscribers to a form.
2 parents f640e38 + 2186dd6 commit fc32241

File tree

3 files changed

+46
-3
lines changed

3 files changed

+46
-3
lines changed

DependencyInjection/CompilerPass.php

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public function process(ContainerBuilder $container)
1515
{
1616
$this->loadFormlyFields($container);
1717
$this->loadDataProviders($container);
18-
18+
$this->loadSubscribers($container);
1919
}
2020

2121
/**
@@ -51,4 +51,19 @@ public function loadDataProviders(ContainerBuilder $container)
5151
}
5252
}
5353
}
54+
55+
/**
56+
* @param ContainerBuilder $container
57+
*/
58+
public function loadSubscribers(ContainerBuilder $container)
59+
{
60+
$containerDefinition = $container->getDefinition('dynamic_form.factory');
61+
$taggedServices = $container->findTaggedServiceIds('dynamic_form.event_subscriber');
62+
63+
foreach ($taggedServices as $id => $tags) {
64+
foreach ($tags as $attributes) {
65+
$containerDefinition->addMethodCall('addEventSubscriber', [$attributes['form_name'], new Reference($id)]);
66+
}
67+
}
68+
}
5469
}

Form/FormFactory.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
use Linio\DynamicFormBundle\DataProvider;
66
use Linio\DynamicFormBundle\Exception\NonExistentFormException;
7+
use Linio\DynamicFormBundle\Exception\NotExistentDataProviderException;
8+
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
79
use Symfony\Component\Form\FormBuilderInterface;
810
use Symfony\Component\Form\FormFactory as SymfonyFormFactory;
911
use 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
{

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"license": "BSD-3-Clause",
77
"require": {
88
"php": ">=5.4",
9-
"symfony/framework-bundle": "~2.3",
10-
"symfony/form": "~2.3"
9+
"symfony/framework-bundle": ">=2.3",
10+
"symfony/form": ">=2.3"
1111
},
1212
"require-dev": {
1313
"phpunit/phpunit": "4.6.*",

0 commit comments

Comments
 (0)