2

Hi guys i have the following code in my javascript that sends POST request to one of my symfony's application controller:

$( "#manage-products-modal" ).delegate("#manage-products-form","submit",function( event ) {
                  event.preventDefault();

                  var formdata = new FormData(this);
                  formdata.append("products", JSON.stringify(viewCtrl.dliProductsChanged));
                  var params = {
                        type: "POST",
                        data: formdata,
                        processData: false,
                        contentType: 'application/json',
                        url: app.base_uri + '/admin/discount-level/' + + viewCtrl.discountLevelItemId + '/manage-product/update',
                        success: function($data){

                        },
                  }

                  console.log(JSON.stringify(viewCtrl.dliProductsChanged));

                  $.ajax(params);
            });

and here is my controller action:

public function manageProductUpdateAction($discountLevelItemId, Request   $request)
{

    $em = $this->getDoctrine()->getEntityManager();
    $entity = $em->getRepository('CIInventoryBundle:DiscountLevelItem')->find($discountLevelItemId);
    $form = $this->createForm(new DiscountLevelItemCollectionType(), $entity);
    $form->bindRequest($request);

    $encoders = array(new XmlEncoder(), new JsonEncoder());
    $normalizers = array(new CustomNormalizer());
    $serializer = new Serializer($normalizers, $encoders);

    $data = $request->request->all();
    var_dump($request->request->all());die;
    var_dump($serializer->serialize($data['products'], 'json'));
    die;
}

My problem here is, when i dump and try to get data, it returns NULL or empty array.

So what seems to be the problem?

Thanks.

Suf_Malek
  • 636
  • 6
  • 10
iamjc015
  • 2,127
  • 6
  • 25
  • 61
  • If I remember correctly Symfony expects the `POST` parameters to be send as `application/x-www-form-urlencode` and can't handle `json` out of the box. See [this answer](http://stackoverflow.com/questions/9522029/posting-json-objects-to-symfony-2) – enricog Feb 09 '16 at 06:58

3 Answers3

0

You have use Response here.

use Symfony\Component\HttpFoundation\Response;

public function manageProductUpdateAction($discountLevelItemId, Request   $request) 
{

    $em = $this->getDoctrine()->getEntityManager();
    $entity = $em->getRepository('CIInventoryBundle:DiscountLevelItem')->find($discountLevelItemId);
    $form = $this->createForm(new DiscountLevelItemCollectionType(), $entity);
    $form->bindRequest($request);

    $encoders = array(new XmlEncoder(), new JsonEncoder());
    $normalizers = array(new CustomNormalizer());
    $serializer = new Serializer($normalizers, $encoders);

    $data = $request->request->all();
    return new Response($data);
}
Suf_Malek
  • 636
  • 6
  • 10
0
public function manageProductUpdateAction($discountLevelItemId, Request   $request)
{

    $em = $this->getDoctrine()->getEntityManager();
    $entity = $em->getRepository('CIInventoryBundle:DiscountLevelItem')->find($discountLevelItemId);
    $form = $this->createForm(new DiscountLevelItemCollectionType(), $entity);
    $form->bindRequest($request);

    $encoders = array(new XmlEncoder(), new JsonEncoder());
    $normalizers = array(new CustomNormalizer());
    $serializer = new Serializer($normalizers, $encoders);

    $data = $request->request->all();

    $response = new Response(json_encode($data));
    $response->headers->set('Content-Type', 'application/json');
    return $response;
}
Jimish Gamit
  • 1,014
  • 5
  • 15
0

If you're passing Json via request, you need to get it as content from request and decode it.

I don't exactly know what you're doing, but here's a var_dump that will demonstrate my point.

    public function manageProductUpdateAction($discountLevelItemId, Request   $request)
    {

        $em = $this->getDoctrine()->getEntityManager();
        $entity = $em->getRepository('CIInventoryBundle:DiscountLevelItem')->find($discountLevelItemId);
        $form = $this->createForm(new DiscountLevelItemCollectionType(), $entity);
        $form->bindRequest($request);

        $encoders = array(new XmlEncoder(), new JsonEncoder());
        $normalizers = array(new CustomNormalizer());
        $serializer = new Serializer($normalizers, $encoders);

//        $data = $request->request->all();
//        var_dump($request->request->all());die;
//        var_dump($serializer->serialize($data['products'], 'json'));
//        die;

        $content = $request->getContent(); // get raw json
        $jsonDecoded = json_decode($content);
        var_dump($json); exit;

    }
Aries
  • 744
  • 5
  • 13