Réponses:
Le moyen le plus simple de le faire serait d'utiliser le plugin Params , introduit dans la version beta5. Il dispose de méthodes utilitaires pour faciliter l'accès à différents types de paramètres. Comme toujours, la lecture des tests peut s'avérer utile pour comprendre comment quelque chose est censé être utilisé.
Pour obtenir la valeur d'un paramètre nommé dans un contrôleur, vous devrez sélectionner la méthode appropriée pour le type de paramètre que vous recherchez et passer le nom.
$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
Toutes ces méthodes prennent également en charge les valeurs par défaut qui seront renvoyées si aucun paramètre portant le nom donné n'est trouvé.
$orderBy = $this->params()->fromQuery('orderby', 'name');
Lorsque vous visitez http://example.com/?orderby=birthdate ,
$ orderBy aura la valeur date de naissance .
Lorsque vous visitez http://example.com/ ,
$ orderBy aura le nom de valeur par défaut .
Pour obtenir tous les paramètres d'un même type, ne transmettez rien et le plugin Params renverra un tableau de valeurs avec leurs noms comme clés.
$allGetValues = $this->params()->fromQuery(); // empty method call
Lorsque vous visitez http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues sera un tableau comme
array(
'orderby' => 'birthdate',
'filter' => 'hasphone',
);
Si vous vérifiez le code source du plugin Params, vous verrez qu'il ne s'agit que d'un mince wrapper autour d'autres contrôleurs pour permettre une récupération des paramètres plus cohérente. Si, pour une raison quelconque, vous voulez / devez y accéder directement, vous pouvez voir dans le code source comment cela se fait.
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
REMARQUE: vous auriez pu utiliser les superglobales $ _GET, $ _POST etc., mais cela est déconseillé.
Le moyen le plus simple d'obtenir une chaîne json publiée, par exemple, est de lire le contenu de «php: // input», puis de le décoder. Par exemple, j'avais un itinéraire Zend simple:
'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/save-json/',
'defaults' => array(
'controller' => 'CDB\Controller\Index',
'action' => 'save-json',
),
),
),
et je voulais y publier des données en utilisant $ http.post d'Angular. Le message était bien mais la méthode de récupération dans Zend
$this->params()->fromPost('paramname');
n'a rien obtenu dans ce cas. Ma solution était donc, après avoir essayé toutes sortes de méthodes comme $ _POST et les autres méthodes indiquées ci-dessus, de lire à partir de 'php: //':
$content = file_get_contents('php://input');
print_r(json_decode($content));
J'ai mon tableau json à la fin. J'espère que cela t'aides.
$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;
Toutes les méthodes ci-dessus fonctionneront correctement si votre type de contenu est "application / -www-form-urlencoded". Mais si votre type de contenu est "application / json", vous devrez effectuer les opérations suivantes:
$ params = json_decode (file_get_contents ('php: // input'), true); print_r ($ params);
Raison: voir n ° 7 sur https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make
Si vous n'avez pas accès au plugin par exemple en dehors du contrôleur, vous pouvez obtenir des paramètres de servicelocator comme ceci
//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')