2014-01-21 11 views
6

Ich erhalte get Parameter diesesget Post Parameter in Zend Framework in der Methode "put"

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

mit fand ich zwei Wege POST

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

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

Beide dieser Arbeits in „POST bekommen Parameter "Methode aber jetzt in einer" PUT "-Methode, wenn ich Werte als Post-Parameter übergebe.

Wie kann ich Post-Parameter in "PUT" -Methode bekommen?

Antwort

5

Sie benötigen den Anforderungstext zu lesen und analysieren es, so etwas wie diese:

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

Dies wird analysiert alle params in den $putParams -array, so dass Sie darauf zugreifen können, wie Sie das Super Globals zugreifen würden $_POST oder $_GET. Zum Beispiel:

// 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

verwenden war Was wird das zurückgeben? und Wie man spezifischen Parameter von der Liste der Parameter erhält? – keen

+0

Siehe aktualisierte Antwort –

7

ich denke, der richtige Weg, dies zu tun ist durch Zend_Controller_Plugin_PutHandler mit:

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

und dann können Sie Ihre params über getParams erhalten()

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

oder einfach

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

es gibt einen Fehler, dass "Front Controller nicht gefunden". Muss ich irgendeine Datei importieren, um diese zu verwenden? – keen

+0

sollte es von Ihrem Zend Autoloader enthalten sein. Wenn nicht, sollten Sie Zend \ Constroller \ Front und Zend \ Controller \ Plugin \ PutHandler in Ihren Code aufnehmen – npetrovski

0

Ich hatte Probleme mit PUT Daten von AngularJS geschickt und fand der beste Weg, einen benutzerdefinierten 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); 
     } 
    } 
} 

die dann sein können Zugriffe über getParams als PHP-Objekt

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