get post parameters in zend framework in "put" method

9.2k views Asked by At

I am getting get parameters using this

$this->params()->fromQuery('KEY');

I found two way to get POST parameters

//first way
$this->params()->fromPost('KEY', null);

//second way
$this->getRequest()->getPost();

Both of this working in "POST" method but now in a "PUT" method if I pass values as a post parameters.

How I can get post parameters in "PUT" method?

3

There are 3 answers

1
Kasper Pedersen On BEST ANSWER

You need to read the request body and parse it, something like this:

$putParams = array();
parse_str($this->getRequest()->getContent(), $putParams);

This will parse all params into the $putParams-array, so you can access it like you would access the super globals $_POST or $_GET. For instance:

// Get the parameter named 'id'
$id = $putParams['id'];

// Loop over all params
foreach($putParams as $key => $value) {
    echo 'Put-param ' . $key . ' = ' . $value . PHP_EOL;
}
0
bstoney On

I had trouble using PUT data sent from AngularJS and found the best way was to use a custom Zend plugin

class Web_Mvc_Plugin_JsonPutHandler extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        if (!$request instanceof Zend_Controller_Request_Http) {
            return;
        }
        if ($this->_request->isPut()) {
            $putParams = json_decode($this->_request->getRawBody());
            $request->setParam('data', $putParams);
        }
    }
}

Which can then be accesses via getParams as a PHP object

    $data = $this->getRequest()->getParam('data');
    $id = $data->id;
2
npetrovski On

I guess the right way of doing that is by using Zend_Controller_Plugin_PutHandler:

// you can put this code in your projects bootstrap
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Zend_Controller_Plugin_PutHandler());

and then you can get your params via getParams()

foreach($this->getRequest()->getParams() as $key => $value) {
    ...
}

or simply

$this->getRequest()->getParam("myvar");