6. Form¶
Have you noticed how Openjet generates forms for you? This is a great Sylius feature. Of course, if needed you may want to create a custom form.
6.1. Create a Custom FormType class for your resource¶
<?php
/*
* This file is part of the Openjet package.
*
* (c) Openjet SA
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Openjet\Bundle\AppBundle\Form\Type\User;
use Openjet\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
class UserType extends AbstractResourceType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstName', TextType::class)
->add('lastName', TextType::class)
->add('email', EmailType::class);
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'openjet_user';
}
}
Note
The getBlockPrefix method returns the prefix of the template block name for this type.
6.2. Register the FormType as a service¶
Warning
the registration of a form type is only needed when the form is extending the AbstractResourceType
or when it has some custom constructor dependencies.
<parameters>
<parameter key="openjet.form.type.user.class">Openjet\Bundle\AppBundle\Form\Type\User\UserType</parameter>
</parameters>
<services>
<service id="openjet.form.type.user" class="%openjet.form.type.user.class%">
<argument>%openjet.model.user.class%</argument>
<argument>%openjet.validation_groups.user%</argument>
<tag name="form.type"/>
</service>
</services>
6.3. Configure the form for your resource¶
openjet_resource:
resources:
user:
classes:
form: 'expr:parameter("openjet.form.type.user.class")'
That’s it. Your new class will be used for all forms!