@@ -20,98 +20,51 @@ Installation
20
20
### Add the bundle as dependency with Composer
21
21
22
22
``` bash
23
- $ php composer.phar require yokai/enum-bundle
23
+ $ composer require yokai/enum-bundle
24
24
```
25
25
26
26
### Enable the bundle in the kernel
27
27
28
28
``` php
29
29
<?php
30
- // app/AppKernel .php
30
+ // config/bundles .php
31
31
32
- public function registerBundles()
33
- {
34
- $bundles = [
32
+ return [
35
33
// ...
36
- new Yokai\EnumBundle\YokaiEnumBundle(),
37
- ];
38
- }
34
+ Yokai\EnumBundle\YokaiEnumBundle::class => ['all' => true],
35
+ ];
39
36
```
40
37
41
38
42
39
Usage
43
40
-----
44
41
45
- Let's take an example : our application has some members and each member has a ` gender ` and a ` state ` .
42
+ Let's take an example : our application has some members and each member has a ` gender ` which can be "male" ( ` m ` ) or "female" ( ` f ` ) .
46
43
47
44
We first need to create the classes that will handle our enums :
48
45
46
+ > ** Note** this example is optimized for latest versions of Symfony, you will find more in dedicated doc file.
47
+
49
48
``` php
50
49
<?php
51
- // src/AppBundle /Enum/Member/GenderEnum.php
52
- namespace AppBundle \Enum\Member;
50
+ // src/App /Enum/Member/GenderEnum.php
51
+ namespace App \Enum\Member;
53
52
54
53
use Yokai\EnumBundle\Enum\EnumInterface;
54
+ use Yokai\EnumBundle\Enum\EnumWithClassAsNameTrait;
55
55
56
56
class GenderEnum implements EnumInterface
57
57
{
58
- const NAME = 'member.gender' ;
58
+ use EnumWithClassAsNameTrait ;
59
59
60
60
public function getChoices()
61
61
{
62
- return ['male' => 'Male', 'female' => 'Female'];
63
- }
64
-
65
- public function getName()
66
- {
67
- return static::NAME;
68
- }
69
- }
70
- ```
71
-
72
- ``` php
73
- <?php
74
- // src/AppBundle/Enum/Member/StateEnum.php
75
- namespace AppBundle\Enum\Member;
76
-
77
- use Yokai\EnumBundle\Enum\AbstractTranslatedEnum;
78
-
79
- class StateEnum extends AbstractTranslatedEnum
80
- {
81
- const NAME = 'member.state';
82
-
83
- protected function getValues()
84
- {
85
- return ['new', 'validated', 'disabled'];
86
- }
87
-
88
- public function getName()
89
- {
90
- return static::NAME;
62
+ return ['m' => 'Male', 'f' => 'Female'];
91
63
}
92
64
}
93
65
```
94
66
95
- Then we must declare these classes as services :
96
-
97
- ``` xml
98
- <!-- src/AppBundle/Resources/config/services.xml -->
99
- <services >
100
- <!-- ... -->
101
-
102
- <service id =" enum.member.gender" class =" AppBundle\Enum\Member\GenderEnum" public =" false" >
103
- <tag name =" enum" />
104
- </service >
105
-
106
- <service id =" enum.member.state" class =" AppBundle\Enum\Member\StateEnum"
107
- parent =" enum.abstract_translated" public =" false" >
108
- <argument >choice.member.state.%s</argument >
109
-
110
- <tag name =" enum" />
111
- </service >
112
-
113
- </services >
114
- ```
67
+ If you are using PSR-4 service discovery, then your service is already registered.
115
68
116
69
That's it, now the bundle know your enum services. You can start using it.
117
70
@@ -126,23 +79,12 @@ use Yokai\EnumBundle\Validator\Constraints\Enum;
126
79
127
80
class Member
128
81
{
129
- //...
130
-
131
82
/**
132
83
* @var string
133
84
*
134
- * @Enum("member.state")
135
- */
136
- protected $state;
137
-
138
- /**
139
- * @var string
140
- *
141
- * @Enum("member.gender")
85
+ * @Enum("App\Enum\Member\GenderEnum")
142
86
*/
143
87
protected $gender;
144
-
145
- //...
146
88
}
147
89
```
148
90
@@ -156,43 +98,31 @@ namespace AppBundle\Form\Type;
156
98
use AppBundle\Enum\GenderEnum;
157
99
use AppBundle\Enum\StateEnum;
158
100
use Symfony\Component\Form\AbstractType;
159
- // For Symfony >= 2.8
160
- use Yokai\EnumBundle\Form\Type\EnumType;
161
101
162
102
class MemberType extends AbstractType
163
103
{
164
104
public function buildForm(FormBuilderInterface $builder, array $options)
165
105
{
166
106
$builder
167
107
// Let the bundle guess the form type for you (requires that you configured the validation)
168
- ->add('state')
169
108
->add('gender')
170
-
171
- // Manual form type binding for Symfony >= 2.8
172
- ->add('state', EnumType::class, ['enum' => StateEnum::NAME])
173
- ->add('gender', EnumType::class, ['enum' => GenderEnum::NAME])
174
-
175
- // Manual form type binding for Symfony 2.7
176
- ->add('state', 'enum', ['enum' => StateEnum::NAME])
177
- ->add('gender', 'enum', ['enum' => GenderEnum::NAME])
178
109
;
179
110
}
180
111
}
181
112
```
182
113
183
-
184
114
Displaying the label for an enum value within a template :
185
115
186
116
``` twig
187
- {{ value|enum_label(constant('AppBundle\\Enum\\Member\\StateEnum::NAME')) }}
188
- {{ value|enum_label(constant('AppBundle\\Enum\\Member\\GenderEnum::NAME')) }}
117
+ {{ value|enum_label(constant('AppBundle\\Enum\\Member\\GenderEnum')) }}
189
118
```
190
119
191
120
192
121
Recipes
193
122
------------
194
123
195
124
- Usage in [ SonataAdminBundle] ( https://github.com/sonata-project/SonataAdminBundle ) : see [ doc] ( Resources/doc/sonata-admin.md )
125
+ - All the ways to [ declare enums] ( Resources/doc/declaring-enum.md )
196
126
197
127
198
128
MIT License
0 commit comments