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!