Antworten:
Der einfachste Weg, dies zu tun, wäre die Verwendung des in Beta5 eingeführten Params-Plugins . Es verfügt über Dienstprogrammmethoden, die den Zugriff auf verschiedene Arten von Parametern erleichtern. Wie immer kann sich das Lesen der Tests als wertvoll erweisen, um zu verstehen, wie etwas verwendet werden soll.
Um den Wert eines benannten Parameters in einem Controller zu erhalten, müssen Sie die entsprechende Methode für den gesuchten Parametertyp auswählen und den Namen übergeben.
$this->params()->fromPost('paramname'); // From POST
$this->params()->fromQuery('paramname'); // From GET
$this->params()->fromRoute('paramname'); // From RouteMatch
$this->params()->fromHeader('paramname'); // From header
$this->params()->fromFiles('paramname'); // From file being uploaded
Alle diese Methoden unterstützen auch Standardwerte, die zurückgegeben werden, wenn kein Parameter mit dem angegebenen Namen gefunden wird.
$orderBy = $this->params()->fromQuery('orderby', 'name');
Beim Besuch von http://example.com/?orderby=birthdate hat
$ orderBy den Wert Geburtsdatum .
Bei einem Besuch in http://example.com/ ,
$ orderBy die haben Standardwert Namen .
Um alle Parameter eines Typs zu erhalten, übergeben Sie einfach nichts und das Params-Plugin gibt ein Array von Werten mit ihren Namen als Schlüssel zurück.
$allGetValues = $this->params()->fromQuery(); // empty method call
Beim Besuch von http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues wird ein Array wie
array(
'orderby' => 'birthdate',
'filter' => 'hasphone',
);
Wenn Sie den Quellcode überprüfen für das Params-Plugin überprüfen, werden Sie feststellen, dass es sich nur um einen dünnen Wrapper um andere Controller handelt, um ein konsistenteres Abrufen von Parametern zu ermöglichen. Wenn Sie aus irgendeinem Grund direkt darauf zugreifen möchten / müssen, können Sie im Quellcode sehen, wie es gemacht wird.
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
HINWEIS: Sie hätten die Superglobalen $ _GET, $ _POST usw. verwenden können, aber davon wird abgeraten.
Der einfachste Weg, einen geposteten JSON-String zu erhalten, besteht beispielsweise darin, den Inhalt von 'php: // input' zu lesen und ihn dann zu dekodieren. Zum Beispiel hatte ich eine einfache Zend-Route:
'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/save-json/',
'defaults' => array(
'controller' => 'CDB\Controller\Index',
'action' => 'save-json',
),
),
),
und ich wollte Daten mit Angulars $ http.post darauf posten. Die Post war in Ordnung, aber die Retrive-Methode in Zend
$this->params()->fromPost('paramname');
habe in diesem Fall nichts bekommen. Meine Lösung bestand also darin, nachdem ich alle Arten von Methoden wie $ _POST und die anderen oben genannten Methoden ausprobiert hatte, aus 'php: //' zu lesen:
$content = file_get_contents('php://input');
print_r(json_decode($content));
Am Ende habe ich mein JSON-Array bekommen. Hoffe das hilft.
$content = $this->getRequest()->getContent()
?name=mike
?
require_once 'lib/Zend/Loader/StandardAutoloader.php';
$loader = new Zend\Loader\StandardAutoloader(array('autoregister_zf' => true));
$loader->registerNamespace('Http\PhpEnvironment', 'lib/Zend/Http');
// Register with spl_autoload:
$loader->register();
$a = new Zend\Http\PhpEnvironment\Request();
print_r($a->getQuery()->get()); exit;
Alle oben genannten Methoden funktionieren einwandfrei, wenn Ihr Inhaltstyp "application / -www-form-urlencoded" ist. Wenn Ihr Inhaltstyp jedoch "application / json" ist, müssen Sie Folgendes tun:
$ params = json_decode (file_get_contents ('php: // input'), true); print_r ($ params);
Grund: Siehe Nr. 7 unter https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make
Wenn Sie beispielsweise außerhalb des Controllers keinen Zugriff auf das Plugin haben, können Sie Parameter wie folgt von servicelocator abrufen
//from POST
$foo = $this->serviceLocator->get('request')->getPost('foo');
//from GET
$foo = $this->serviceLocator->get('request')->getQuery()->foo;
//from route
$foo = $this->serviceLocator->get('application')->getMvcEvent()->getRouteMatch()->getParam('foo');
$this->params('key', 'default')