Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get parameters from a PUT request in Symfony2?

I'm using Symfony 2.3, and I have a method that looks like this:

public function addAction() {

    $user = new User();
    $form = $this->createForm(new UserType(), $user);
    $form->handleRequest($this->getRequest());

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();

        try {
            return $this
                    ->render(
                            'SomeBundle:Default:adduser.html.twig',
                            array('id' => $user->getId()));
        } catch (Exception $e) {
            throw new HttpException(500, "Error persisting");
        }
    }

    throw new HttpException(400, "Invalid request");
}

with this route:

some_bundle_adduserpage:
pattern: /user
defaults: { _controller: SomeBundle:User:add }
methods: [POST]

and it works just fine. I also have this method:

public function editAction($id) {

    $response = new Response();

    if (!$this->doesUserExist($id)) {
        $response->setStatusCode(400);
        return $response;
    }

    $user = new User();
    $form = $this->createForm(new UserType(), $user);
    $form->handleRequest($this->getRequest());

    if (!$form->isValid()) {
        $response->setStatusCode(400);
        return $response;
    }

    $user->setId($id);
    $em = $this->getDoctrine()->getManager();

    try {
        $em->persist($user);
        $em->flush();

        $response->setStatusCode(200);
    } catch (Exception $e) {
        $response->setStatusCode(500);
    }

    return $response;
}

with this route:

some_bundle_edituserpage:
pattern: /user/{id}
defaults: { _controller: SomeBundle:User:edit }
methods: [PUT]
requirements:
    id: \d+

and it doesn't work. I can craft some request and POST it just fine, but the PUT doesn't work. Specifically, it looks like I'm not getting any parameters inside of $this->getRequest(). Why does $this->getRequest() seem to work for POST, but not PUT? What am I doing wrong?

like image 839
bstempi Avatar asked Jan 22 '14 06:01

bstempi


1 Answers

This did the trick:

$form = $this ->createForm(new UserType(), $user, array('method' => 'PUT'));

The method bit was missing. Apparently, Symfony isn't cool enough to just get the parameters for you. When creating a form, you have to manually tell it what type of request it's dealing with. While this worked, I'm not sure that this is the best answer. I'm more than willing to hear others.

like image 97
bstempi Avatar answered Nov 13 '22 06:11

bstempi