Easy form flow handling in Symfony controllers., (*1)
Why?, (*2)
- use really thin controllers
- make your controller unit-testable easier
- Do not Repeat Yourself implementing the boring form-subbmission code!
All you need is to use the @Form class annotation, for example:, (*3)
@Form("new_form",method="createCreateForm")
, (*4)
With this annotation you can list all the forms used in current controller. The method
attribute points to method that creates this particular form., (*5)
Now, you can annotate methods which "starts" form-flow with the @FormStarter
and the methods which accepts form submission using the @FormAcceptor
annotation., (*6)
The FormListener will handle the flow, it will create the form and inject it into the template parameters in form-starter methods, so you don't have to do it manually.
Also, it will handle the acceptor; bind and validate the form. Note that the form-acceptor method is executed only if the form is valid, so the only thing you need to do in your form-acceptor method is to persist your fresh created/updated entity., (*7)
If the form submission fails, the flow stops at starter method - it will show the bound form with error message., (*8)
You can also "decorate" the form-acceptor behavior for failed forms.
Use the rejector
property to point a method which will be executed when form submission fails. This may be useful when you need to show some flash-messages or use some logging., (*9)
You may want to access the form in the form-acceptor method. To do this, use the param
property of @FormAcceptor
annotation and then, the form will be passed as the input parameter of form-acceptor method., (*10)
See the PostController
class for example how to use those annotations. If you want to see how it works, check out the example symfony-project that uses this bundle., (*11)
Note that you need to use the @Template
annotations in your form-starter controller, because FormListener needs to act before the view is rendered., (*12)
Installation
Just add the following line to the "require"
section in your composer.json file:, (*13)
"xis/easy-forms-bundle": "~0.1"
Don't forget to update composer dependencies:, (*14)
composer.phar update
Then you need to update your AppKernel.php
file and enable the bundle by adding the folowing entry to the $bundles
array in registerBundles
method:, (*15)
new Xis\EasyFormsBundle\XisEasyFormsBundle(),
And that's it., (*16)
MIT License
The bundle is distributed under the MIT license., (*17)