Simply use the JsonControllerTrait and then use forms as you would normally,
but they now expect to receive JSON.
php composer.phar require mcfedr/json-formInclude the bundle in your AppKernel
publicfunction registerBundles()
{
$bundles = array(
...
newMcfedr\JsonFormBundle\McfedrJsonFormBundle()The expected JSON will be just like that form values that would be sent.
Suppose you have the following form type
class AccountType extends AbstractType
{
publicfunctionbuildForm(FormBuilderInterface$builder, array$options)
{
$builder
->add('name');
}
publicfunctiongetBlockPrefix()
{
return'account';
}
}Then the JSON should be
{
"account": {
"name": "Fred"
}
}class AccountController extends AbstractController
use JsonControllerTrait;
/** * @Route("/accounts", methods={"POST"}) */publicfunctionaccountCreateAction(Request$request, $uuid) {
$account = newAccount();
$form = $this->createJsonForm(AccountType::class, $account);
$this->handleJsonForm($form, $request);
$em = $this->getDoctrine()->getManager();
$em->persist($account);
$em->flush();
return$this->json([
'account' => $account
]);
}
}For Symfony 3.x you will need to extend Controller because the trait needs
access to getParameter method.
To run the tests
./vendor/bin/php-cs-fixer fix
./vendor/bin/phpunit
./vendor/bin/phpstan analyse
