Allows you to generate Symfony forms using YAML, JSON or associative array configurations based on the standard configurations of the framework's forms component.
See: https://symfony.com/doc/current/reference/forms/types.html
It is based on the use of the add function of the form builder used to create forms with Symfony
- el name para el input de formulario
- el tipo de campo de formulario
- un array de options para configurar este tipo de campo
// FormInterface::add($child, string $type = null, array $options = [])
$builder->add($inputName, $inputTypeClass, $inputOptions);
With this it is possible to create a YAML configuration, JSON or an associative array in which:
- the key represents the $inputName
- type represents a form $inputTypeClass supported by the
- bundle or the "fully qualified class name (FQN)" of a class form type
- the options array represents the form $inputOptions
This allows you to configure forms dynamically by using yaml, json or an associative array like the examples below:
name:
birthday:
type: date
options:
label: 'Your Birthday'
status:
type: choice
options:
choices:
Active: A
Inactive: I
custom_type:
type: App\Form\Type\CustomType
options:
custom_option: value
{
"name": null,
"birthday": {
"type": "date",
"options": {
"label": "Your Birthday"
}
},
"status": {
"type": "choice",
"options": {
"choices": {
"Active": "A",
"Inactive": "I"
}
}
},
"custom_type": {
"type": "App\\Form\\Type\\CustomType",
"options": {
"custom_option": "value"
}
}
}
$formConfig = [
'name' => NULL,
'birthday' => [
'type' => 'date',
'options' => [
'label' => 'Your Birthday',
],
],
'status' => [
'type' => 'choice',
'options' => [
'choices' => [
'Active' => 'A',
'Inactive' => 'I',
],
],
],
'custom_type' => [
'type' => 'App\\Form\\Type\\CustomType',
'options' => [
'custom_option' => 'value',
],
],
]
composer require micayael/form-generator-bundle
Where it is necessary to create a form, for example a controller or a service, you must inject the FormGenerator object provided by the bundle.
class HomeController extends AbstractController
{
/** @required */
public FormGenerator $formGenerator;
public function __invoke(Request $request): Response
{
$formConfigArray = []; // configuration as associative array
// Gets a FormInterface object with the configured form
$form = $this->formGenerator->createForm($formConfigArray);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$formData = $form->getData();
// process your form
}
}
The FormGenerator service provides the following methods:
- FormGenerator::createForm(array $formConfig, array $formOptions = [], $data = null, string $baseFormTypeClass = null, string $groupName = null): Creates a form from an associative array
- FormGenerator::createFormFromJson(string $formConfigJson, array $formOptions = [], $data = null, string $baseFormTypeClass = null, string $groupName = null): Creates a form from a json string
- FormGenerator::createFormFromYaml(string $formConfigYaml, array $formOptions = [], $data = null, string $baseFormTypeClass = null, string $groupName = null): Creates a form from a yaml string
- array $formConfig: form configuration
- array $formOptions = []: custom form options
- $data = null: form data
- string $baseFormTypeClass = null: Form class (FQN) that will be used as the base to add the other fields. If not passed, they are added to an empty form.
- string $groupName = null: name that will be used to group the fields created by the $formConfig argument as an embeded form
composer install
vendor/bin/phpunit
- phpstan levels: https://phpstan.org/user-guide/rule-levels
vendor/bin/phpstan analyse src tests --level 5
vendor/bin/phpmd ./ text .phpmd-ruleset.xml --exclude var,vendor