Comment puis-je obtenir divers paramètres liés à la demande de page dans zf2? Comme post/get paramètres, la route accessible, les en-têtes envoyés et les fichiers téléchargés.
Réponses
Trop de publicités?La meilleure façon de le faire serait d'utiliser le plugin Params, introduit dans la beta5. Il a une utilité des méthodes pour faciliter l'accès aux différents types de paramètres. Comme toujours, la lecture, les tests peuvent s'avérer utiles pour comprendre comment quelque chose est censé être utilisé.
Obtenir une seule valeur
Pour obtenir la valeur d'un paramètre nommé dans un contrôleur, vous devez sélectionner la méthode appropriée pour le type de paramètre que vous recherchez et de passer le nom.
Exemples:
$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
Les valeurs par défaut
Toutes ces méthodes ont également en charge les valeurs par défaut qui sera restituée si aucun paramètre dont le nom est trouvé.
Exemple:
$orderBy = $this->params()->fromQuery('orderby', 'name');
Lors de la visite http://example.com/?orderby=birthdate,
$orderBy aura la valeur de la date de naissance.
Lors de la visite http://example.com/,
$orderBy aura la valeur par défaut de la valeur de nom.
Obtenir tous les paramètres
Pour obtenir tous les paramètres d'un type, il suffit de ne pas passer de dans quelque chose et les Paramètres du plugin retourne un tableau de valeurs avec leurs noms en tant que touches.
Exemple:
$allGetValues = $this->params()->fromQuery(); // empty method call
Lors de la visite http://example.com/?orderby=birthdate&filter=hasphone $allGetValues sera un tableau comme
array(
'orderby' => 'birthdate',
'filter' => 'hasphone',
);
Pas à l'aide de plugin Params
Si vous consultez le code source pour les Paramètres du plugin, vous verrez que c'est juste un wrapper mince dans d'autres contrôleurs, afin de permettre plus de cohérence paramètre de récupération. Si vous voulez/besoin d'accéder directement à eux, vous pouvez voir dans le code source de la façon dont c'est fait.
Exemple:
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
REMARQUE: Vous pourriez avoir utilisé les superglobales $_GET, $_POST, etc., mais cela est déconseillé.
Le easisest façon à obtenir une posté chaîne json, par exemple, est de lire le contenu de 'php://input' et puis le décoder. J'ai eu par exemple un simple 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',
),
),
),
et je voulais publier des données à l'aide Angulaire de $http.post. Le post était très bien, mais la restauration de la méthode dans Zend
$this->params()->fromPost('paramname');
ne pas obtenir quelque chose dans ce cas. Donc ma solution a été, après avoir essayé toutes sortes de méthodes comme les $_POST et les autres méthodes décrites ci-dessus, à lire à partir de 'php://':
$content = file_get_contents('php://input');
print_r(json_decode($content));
J'ai obtenu mon tableau json à la fin. Espérons que cette aide.