@@ -20,98 +20,51 @@ Installation
2020### Add the bundle as dependency with Composer
2121
2222``` bash
23- $ php composer.phar require yokai/enum-bundle
23+ $ composer require yokai/enum-bundle
2424```
2525
2626### Enable the bundle in the kernel
2727
2828``` php
2929<?php
30- // app/AppKernel .php
30+ // config/bundles .php
3131
32- public function registerBundles()
33- {
34- $bundles = [
32+ return [
3533 // ...
36- new Yokai\EnumBundle\YokaiEnumBundle(),
37- ];
38- }
34+ Yokai\EnumBundle\YokaiEnumBundle::class => ['all' => true],
35+ ];
3936```
4037
4138
4239Usage
4340-----
4441
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 ` ) .
4643
4744We first need to create the classes that will handle our enums :
4845
46+ > ** Note** this example is optimized for latest versions of Symfony, you will find more in dedicated doc file.
47+
4948``` php
5049<?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;
5352
5453use Yokai\EnumBundle\Enum\EnumInterface;
54+ use Yokai\EnumBundle\Enum\EnumWithClassAsNameTrait;
5555
5656class GenderEnum implements EnumInterface
5757{
58- const NAME = 'member.gender' ;
58+ use EnumWithClassAsNameTrait ;
5959
6060 public function getChoices()
6161 {
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'];
9163 }
9264}
9365```
9466
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.
11568
11669That's it, now the bundle know your enum services. You can start using it.
11770
@@ -126,23 +79,12 @@ use Yokai\EnumBundle\Validator\Constraints\Enum;
12679
12780class Member
12881{
129- //...
130-
13182 /**
13283 * @var string
13384 *
134- * @Enum("member.state")
135- */
136- protected $state;
137-
138- /**
139- * @var string
140- *
141- * @Enum("member.gender")
85+ * @Enum("App\Enum\Member\GenderEnum")
14286 */
14387 protected $gender;
144-
145- //...
14688}
14789```
14890
@@ -156,43 +98,31 @@ namespace AppBundle\Form\Type;
15698use AppBundle\Enum\GenderEnum;
15799use AppBundle\Enum\StateEnum;
158100use Symfony\Component\Form\AbstractType;
159- // For Symfony >= 2.8
160- use Yokai\EnumBundle\Form\Type\EnumType;
161101
162102class MemberType extends AbstractType
163103{
164104 public function buildForm(FormBuilderInterface $builder, array $options)
165105 {
166106 $builder
167107 // Let the bundle guess the form type for you (requires that you configured the validation)
168- ->add('state')
169108 ->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])
178109 ;
179110 }
180111}
181112```
182113
183-
184114Displaying the label for an enum value within a template :
185115
186116``` 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')) }}
189118```
190119
191120
192121Recipes
193122------------
194123
195124- 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 )
196126
197127
198128MIT License
0 commit comments