2014-01-21 2 views
6

Я получаю параметры GET с помощью этогоприбудет разместить параметры в рамках ZEND в методе "положить"

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

Я нашел два способа получить POST параметров

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

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

Оба этой работа в «POST ", но теперь в методе" PUT ", если я передаю значения в качестве параметров сообщения.

Как я могу получить параметры сообщения в методе «PUT»?

ответ

5

Вы должны прочитать тело запроса и разобрать его, что-то вроде этого:

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

Это будет анализировать все Params в $putParams -array, так что вы можете получить доступ к нему, как доступ будет супер глобалам $_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; 
} 
+0

что это вернет? и Как получить определенный параметр из списка параметров? – keen

+0

См. Обновленный ответ –

7

Я предполагаю, что правильный способ сделать это с помощью 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()); 

, а затем вы можете получить Params через getParams()

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

или просто

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

, он дает ошибку, что «передний контроллер не найден». Нужно ли мне импортировать какой-либо файл, чтобы использовать это? – keen

+0

он должен быть включен автозагрузчиком Zend. Если это не так, я полагаю, вы должны включить Zend \ Constroller \ Front и Zend \ Controller \ Plugin \ PutHandler в свой код – npetrovski

0

у меня были проблемы с использованием данных 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; 
Смежные вопросы