@@ -20,142 +20,86 @@ 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
- ``` php
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
43
+ and each member has a ` gender ` which can be "male" (` m ` ) or "female" (` f ` ).
46
44
47
45
We first need to create the classes that will handle our enums :
48
46
49
- ``` php
47
+ > ** Note** this example is optimized for latest versions of Symfony, you will find more in dedicated doc file.
48
+
49
+ ``` php
50
50
<?php
51
- // src/AppBundle /Enum/Member /GenderEnum.php
52
- namespace AppBundle \Enum\Member ;
51
+ // src/App /Enum/GenderEnum.php
52
+ namespace App \Enum;
53
53
54
54
use Yokai\EnumBundle\Enum\EnumInterface;
55
+ use Yokai\EnumBundle\Enum\EnumWithClassAsNameTrait;
55
56
56
57
class GenderEnum implements EnumInterface
57
58
{
58
- const NAME = 'member.gender' ;
59
+ use EnumWithClassAsNameTrait ;
59
60
60
61
public function getChoices()
61
62
{
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;
63
+ return ['m' => 'Male', 'f' => 'Female'];
91
64
}
92
65
}
93
66
```
94
67
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
- ```
68
+ If you are using [ PSR-4 service discovery] ( https://symfony.com/blog/new-in-symfony-3-3-psr-4-based-service-discovery ) ,
69
+ then your service is already registered.
115
70
116
71
That's it, now the bundle know your enum services. You can start using it.
117
72
118
73
Adding validation to your model :
119
74
120
- ``` php
75
+ ``` php
121
76
<?php
122
- // src/AppBundle /Model/Member.php
123
- namespace AppBundle \Model;
77
+ // src/App /Model/Member.php
78
+ namespace App \Model;
124
79
125
80
use Yokai\EnumBundle\Validator\Constraints\Enum;
126
81
127
82
class Member
128
83
{
129
- //...
130
-
131
- /**
132
- * @var string
133
- *
134
- * @Enum("member.state")
135
- */
136
- protected $state;
137
-
138
84
/**
139
85
* @var string
140
86
*
141
- * @Enum("member.gender ")
87
+ * @Enum("App\Enum\GenderEnum ")
142
88
*/
143
89
protected $gender;
144
-
145
- //...
146
90
}
147
91
```
148
92
149
93
Adding enum form types :
150
94
151
- ``` php
95
+ ``` php
152
96
<?php
153
- // src/AppBundle /Form/Type/MemberType.php
154
- namespace AppBundle \Form\Type;
97
+ // src/App /Form/Type/MemberType.php
98
+ namespace App \Form\Type;
155
99
156
- use AppBundle\Enum\GenderEnum;
157
- use AppBundle\Enum\StateEnum;
100
+ use App\Enum\GenderEnum;
158
101
use Symfony\Component\Form\AbstractType;
102
+ use Symfony\Component\Form\FormBuilderInterface;
159
103
// For Symfony >= 2.8
160
104
use Yokai\EnumBundle\Form\Type\EnumType;
161
105
@@ -165,34 +109,30 @@ class MemberType extends AbstractType
165
109
{
166
110
$builder
167
111
// Let the bundle guess the form type for you (requires that you configured the validation)
168
- ->add('state')
169
112
->add('gender')
170
113
171
114
// Manual form type binding for Symfony >= 2.8
172
- ->add('state', EnumType::class, ['enum' => StateEnum::NAME])
173
- ->add('gender', EnumType::class, ['enum' => GenderEnum::NAME])
115
+ ->add('gender', EnumType::class, ['enum' => GenderEnum::class])
174
116
175
117
// Manual form type binding for Symfony 2.7
176
- ->add('state', 'enum', ['enum' => StateEnum::NAME])
177
- ->add('gender', 'enum', ['enum' => GenderEnum::NAME])
118
+ ->add('gender', 'enum', ['enum' => GenderEnum::class])
178
119
;
179
120
}
180
121
}
181
122
```
182
123
183
-
184
124
Displaying the label for an enum value within a template :
185
125
186
126
``` twig
187
- {{ value|enum_label(constant('AppBundle\\Enum\\Member\\StateEnum::NAME')) }}
188
- {{ value|enum_label(constant('AppBundle\\Enum\\Member\\GenderEnum::NAME')) }}
127
+ {{ value|enum_label('App\\Enum\\GenderEnum') }}
189
128
```
190
129
191
130
192
131
Recipes
193
- ------------
132
+ -------
194
133
195
134
- Usage in [ SonataAdminBundle] ( https://github.com/sonata-project/SonataAdminBundle ) : see [ doc] ( Resources/doc/sonata-admin.md )
135
+ - All the ways to declare [ enums] ( Resources/doc/declaring-enum.md ) or [ translated enums] ( Resources/doc/declaring-translated-enum.md )
196
136
197
137
198
138
MIT License
@@ -206,3 +146,7 @@ Authors
206
146
207
147
The bundle was originally created by [ Yann Eugoné] ( https://github.com/yann-eugone ) .
208
148
See the list of [ contributors] ( https://github.com/yokai-php/enum-bundle/contributors ) .
149
+
150
+ ---
151
+
152
+ Thank's to [ Prestaconcept] ( https://github.com/prestaconcept ) for supporting this bundle.
0 commit comments