This bundle will allow you to transform Symfony forms into JSON.
You can install the package via Composer:
composer require ansien/form-to-json-bundle
Controller:
<?php
declare(strict_types=1);
namespace App\Controller;
use Ansien\FormToJsonBundle\Transformer\Service\FormTransformerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Example;
use App\Form\ExampleType;
class ExampleController extends AbstractController
{
public function __construct(private FormTransformerInterface $formTransformer)
{
}
#[Route('/example', methods: ['GET'])]
public function __invoke(Request $request): JsonResponse
{
$example = new Example('Hello!');
$form = $this->createForm(ExampleType::class, $example);
return new JsonResponse($this->formTransformer->transform($form));
}
}
Example output:
{
"schema": {
"id": "test",
"name": "test",
"type": "super_form",
"disabled": false,
"label": null,
"label_format": null,
"label_html": false,
"multipart": true,
"unique_block_prefix": "_test",
"row_attr": [],
"translation_domain": null,
"label_translation_parameters": [],
"attr_translation_parameters": [],
"valid": true,
"required": true,
"size": null,
"label_attr": [],
"help": null,
"help_attr": [],
"help_html": false,
"help_translation_parameters": [],
"compound": true,
"method": "POST",
"action": "",
"submitted": false,
"attr": [],
"children": {
"text": {
"id": "test_text",
"name": "text",
"type": "text",
"disabled": false,
"label": null,
"label_format": null,
"label_html": false,
"multipart": false,
"unique_block_prefix": "_test_text",
"row_attr": [],
"translation_domain": null,
"label_translation_parameters": [],
"attr_translation_parameters": [],
"valid": true,
"required": true,
"size": null,
"label_attr": [],
"help": null,
"help_attr": [],
"help_html": false,
"help_translation_parameters": [],
"compound": false,
"method": "POST",
"action": "",
"submitted": false,
"attr": []
}
}
},
"values": {
"text": "Test 123"
},
"errors": {
"_global": [
"Test root error"
],
"text": [
"Test error"
]
}
}
You can create your own form type transformer by making a new service that extends AbstractTypeTransformer and tagging it with form_to_json_bundle.type_transformer
.
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
The MIT License (MIT). Please see License File for more information.