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
public function registerBundles()
{
$bundles = array(
...
new Mcfedr\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
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name');
}
public function getBlockPrefix()
{
return 'account';
}
}Then the JSON should be
{
"account": {
"name": "Fred"
}
}class AccountController extends AbstractController
use JsonControllerTrait;
/**
* @Route("/accounts", methods={"POST"})
*/
public function accountCreateAction(Request $request, $uuid) {
$account = new Account();
$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
