2016-05-10 21 views
0

Ich refaktoriere meine Anwendung mit PSR-7 Anfragen mit Slim3 als Router. Auf einigen meiner Einstiegspunkte habe ich eingehende GET und POST HTTP-Anfragen von externen Anwendungen. Sowohl GET als auch POST verwenden die gleichen Parameternamen. Im alten Code, eine einfache $_REQUEST löste das Problem, aber ich möchte die Superglobals nicht mehr verwenden.

Für die Parameter des GET-Request bekommen, verwende ich den folgenden Code:

$parameters = $request->getQueryParams(); 

Für den POST-Request, verwende ich:

$parameters = $request->getParsedBody(); 

Gibt es eine PSR-7-Funktion um das Problem zu lösen, oder muss ich jedes Mal array_merge() verwenden?

+0

Bitte zeigen Sie uns, wie die von Ihnen geschriebenen Methoden tatsächlich aussehen. – Martin

+0

@Martin Die Frage ist nicht spezifisch für eine spezielle Implementierung. Normalerweise haben Sie einen Callback wie 'function ($ request, $ response) {/ * machen Sie ein paar Sachen * /}', siehe Slim3 Dokumentation für weitere Informationen. Es ist ein sehr häufiges Muster für Mikrorahmen. – Trendfischer

+0

PSR-7 schlägt nicht vor oder erwägt sogar die Verwendung von '$ _REQUEST'. – DanFromGermany

Antwort

3

Slims Request-Objekt hat getParam() und getParams() was tut, was Sie wollen. Diese sind jedoch nicht Teil von PSR-7.

+0

Danke, das ist, was ich suchte, aber konnte es nicht in der slim3 docs finden. – Trendfischer

2

In PSR-7 selbst gibt es keine Methode auf der Anfrage-Schnittstelle zu tun, was Sie fordern.

Es könnte möglich sein, dass einige Implementierung es bietet, aber ich würde es seltsam finden.

Wenn Sie können, könnte die einfachste Möglichkeit sein, die ServerResponseInterface-Implementierung, die Sie verwenden, mit einer neuen Methode zu erweitern, die das tut, was Sie brauchen.

In Slim Sie diese Taste das Überschreiben der request Konfiguration tun könnte, Ihr eigenes Anfrage-Objekt bietet

+0

Danke, nur um sicher zu sein: Ich erweitere die ServerResponse-Klasse von Slim um eine Funktion und bei der Initialisierung von Slim setze ich eine leere 'Anfrage' in den Container und benutze diese Instanz um die HTTP-Anfrage zu parsen? – Trendfischer

+0

nicht genau leer, Sie müssen einige Argumente übergeben, wenn Sie es konstruieren. Schauen Sie sich an, wie Slim es selbst in seiner 'Container.registerDefaultServices' Methode macht – marcosh

+0

Ich glaube, Sie meinen die Klasse' DefaultServicesProvider'. Beim Lesen der slim3-Quelle habe ich festgestellt, dass slim eine nicht-psr-7-Methode namens 'createFromEnvironment' implementiert, so dass ich' \ Slim \ Http \ Request' erben und einen Injektionscontainer mit meiner Klasse konfigurieren kann. Es könnte jedoch dazu führen, Konflikte bei zukünftigen Slim-Versionen zu benennen. Ich fürchte, ich bleibe bei meiner 'array_merge()', aber danke. – Trendfischer