вземете параметри за публикуване в zend framework в put метод

Получавам параметри за получаване, използвайки това

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

Намерих два начина за получаване на POST параметри

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

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

И двете работят в метод "POST", но сега в метод "PUT", ако предам стойности като параметри на публикация.

Как мога да получа параметри за публикуване в метода „PUT“?


person keen    schedule 21.01.2014    source източник


Отговори (3)


Трябва да прочетете тялото на заявката и да я анализирате, нещо подобно:

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

Това ще анализира всички параметри в $putParams-масива, така че да имате достъп до него, както бихте имали достъп до суперглобалните $_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;
}
person Kasper Pedersen    schedule 21.01.2014
comment
какво ще върне това? и Как да получите конкретен параметър от списъка с параметри? - person keen; 21.01.2014

Предполагам, че правилният начин да направите това е като използвате 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");
person npetrovski    schedule 30.01.2014
comment
дава грешка, че предният контролер не е намерен. Трябва ли да импортирам някакъв файл, за да използвам това? - person keen; 30.01.2014
comment
той трябва да бъде включен от автоматичното зареждане на вашия Zend. Ако не е, предполагам, че трябва да включите Zend\Constroller\Front и Zend\Controller\Plugin\PutHandler във вашия код - person npetrovski; 14.02.2014

Имах проблеми с използването на 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;
person bstoney    schedule 13.11.2014