получить параметры post в Zend framework в методе " put
Я получаю параметры get, используя это
$this->params()->fromQuery('KEY');
Я нашел два способа получить параметры POST
//first way
$this->params()->fromPost('KEY', null);
//second way
$this->getRequest()->getPost();
оба из этого работают в методе "POST", но теперь в методе" PUT", если я передаю значения в качестве параметров post.
Как я могу получить параметры post в методе "PUT"?
3 ответов
читать нужно текст запроса и проанализировать его, что-то вроде этого:
$putParams = array();
parse_str($this->getRequest()->getContent(), $putParams);
это будет разбирать все параметры в $putParams
-array, поэтому вы можете получить к нему доступ, как к super globals $_POST
или $_GET
. Например:
// Get the parameter named 'id'
$id = $putParams['id'];
// Loop over all params
foreach($putParams as $key => $value) {
echo 'Put-param ' . $key . ' = ' . $value . PHP_EOL;
}
Я думаю, правильный способ сделать это с помощью 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());
и тогда вы можете получить ваши параметры через getParams ()
foreach($this->getRequest()->getParams() as $key => $value) {
...
}
или просто
$this->getRequest()->getParam("myvar");
у меня были проблемы с использованием данных PUT, отправленных из AngularJS, и я нашел лучший способ использовать пользовательский плагин Zend
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);
}
}
}
который затем может быть доступ через getParams
как объект PHP
$data = $this->getRequest()->getParam('data');
$id = $data->id;