diff options
Diffstat (limited to 'vendor/symfony/form/Symfony/Component/Form/Extension/Core/Type/BaseType.php')
-rw-r--r-- | vendor/symfony/form/Symfony/Component/Form/Extension/Core/Type/BaseType.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/vendor/symfony/form/Symfony/Component/Form/Extension/Core/Type/BaseType.php b/vendor/symfony/form/Symfony/Component/Form/Extension/Core/Type/BaseType.php new file mode 100644 index 00000000..79333a67 --- /dev/null +++ b/vendor/symfony/form/Symfony/Component/Form/Extension/Core/Type/BaseType.php | |||
@@ -0,0 +1,121 @@ | |||
1 | <?php | ||
2 | |||
3 | /* | ||
4 | * This file is part of the Symfony package. | ||
5 | * | ||
6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
7 | * | ||
8 | * For the full copyright and license information, please view the LICENSE | ||
9 | * file that was distributed with this source code. | ||
10 | */ | ||
11 | |||
12 | namespace Symfony\Component\Form\Extension\Core\Type; | ||
13 | |||
14 | use Symfony\Component\Form\AbstractType; | ||
15 | use Symfony\Component\Form\FormBuilderInterface; | ||
16 | use Symfony\Component\Form\FormInterface; | ||
17 | use Symfony\Component\Form\FormView; | ||
18 | use Symfony\Component\OptionsResolver\OptionsResolverInterface; | ||
19 | |||
20 | /** | ||
21 | * Encapsulates common logic of {@link FormType} and {@link ButtonType}. | ||
22 | * | ||
23 | * This type does not appear in the form's type inheritance chain and as such | ||
24 | * cannot be extended (via {@link FormTypeExtension}s) nor themed. | ||
25 | * | ||
26 | * @author Bernhard Schussek <bschussek@gmail.com> | ||
27 | */ | ||
28 | abstract class BaseType extends AbstractType | ||
29 | { | ||
30 | /** | ||
31 | * {@inheritdoc} | ||
32 | */ | ||
33 | public function buildForm(FormBuilderInterface $builder, array $options) | ||
34 | { | ||
35 | $builder->setDisabled($options['disabled']); | ||
36 | } | ||
37 | |||
38 | /** | ||
39 | * {@inheritdoc} | ||
40 | */ | ||
41 | public function buildView(FormView $view, FormInterface $form, array $options) | ||
42 | { | ||
43 | $name = $form->getName(); | ||
44 | $blockName = $options['block_name'] ?: $form->getName(); | ||
45 | $translationDomain = $options['translation_domain']; | ||
46 | |||
47 | if ($view->parent) { | ||
48 | if ('' !== ($parentFullName = $view->parent->vars['full_name'])) { | ||
49 | $id = sprintf('%s_%s', $view->parent->vars['id'], $name); | ||
50 | $fullName = sprintf('%s[%s]', $parentFullName, $name); | ||
51 | $uniqueBlockPrefix = sprintf('%s_%s', $view->parent->vars['unique_block_prefix'], $blockName); | ||
52 | } else { | ||
53 | $id = $name; | ||
54 | $fullName = $name; | ||
55 | $uniqueBlockPrefix = '_'.$blockName; | ||
56 | } | ||
57 | |||
58 | if (!$translationDomain) { | ||
59 | $translationDomain = $view->parent->vars['translation_domain']; | ||
60 | } | ||
61 | } else { | ||
62 | $id = $name; | ||
63 | $fullName = $name; | ||
64 | $uniqueBlockPrefix = '_'.$blockName; | ||
65 | |||
66 | // Strip leading underscores and digits. These are allowed in | ||
67 | // form names, but not in HTML4 ID attributes. | ||
68 | // http://www.w3.org/TR/html401/struct/global.html#adef-id | ||
69 | $id = ltrim($id, '_0123456789'); | ||
70 | } | ||
71 | |||
72 | $blockPrefixes = array(); | ||
73 | for ($type = $form->getConfig()->getType(); null !== $type; $type = $type->getParent()) { | ||
74 | array_unshift($blockPrefixes, $type->getName()); | ||
75 | } | ||
76 | $blockPrefixes[] = $uniqueBlockPrefix; | ||
77 | |||
78 | if (!$translationDomain) { | ||
79 | $translationDomain = 'messages'; | ||
80 | } | ||
81 | |||
82 | $view->vars = array_replace($view->vars, array( | ||
83 | 'form' => $view, | ||
84 | 'id' => $id, | ||
85 | 'name' => $name, | ||
86 | 'full_name' => $fullName, | ||
87 | 'disabled' => $form->isDisabled(), | ||
88 | 'label' => $options['label'], | ||
89 | 'multipart' => false, | ||
90 | 'attr' => $options['attr'], | ||
91 | 'block_prefixes' => $blockPrefixes, | ||
92 | 'unique_block_prefix' => $uniqueBlockPrefix, | ||
93 | 'translation_domain' => $translationDomain, | ||
94 | // Using the block name here speeds up performance in collection | ||
95 | // forms, where each entry has the same full block name. | ||
96 | // Including the type is important too, because if rows of a | ||
97 | // collection form have different types (dynamically), they should | ||
98 | // be rendered differently. | ||
99 | // https://github.com/symfony/symfony/issues/5038 | ||
100 | 'cache_key' => $uniqueBlockPrefix.'_'.$form->getConfig()->getType()->getName(), | ||
101 | )); | ||
102 | } | ||
103 | |||
104 | /** | ||
105 | * {@inheritdoc} | ||
106 | */ | ||
107 | public function setDefaultOptions(OptionsResolverInterface $resolver) | ||
108 | { | ||
109 | $resolver->setDefaults(array( | ||
110 | 'block_name' => null, | ||
111 | 'disabled' => false, | ||
112 | 'label' => null, | ||
113 | 'attr' => array(), | ||
114 | 'translation_domain' => null, | ||
115 | )); | ||
116 | |||
117 | $resolver->setAllowedTypes(array( | ||
118 | 'attr' => 'array', | ||
119 | )); | ||
120 | } | ||
121 | } | ||