98 votes

Comment accéder à la route, post, get, etc. paramètres dans Zend Framework 2

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.

206voto

Matsemann Points 4544

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é.

4voto

Susy11 Points 24

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X