2017-07-29 4 views
2

Ich habe eine get Route in FormAbrufen von Query-String-Parameter in Schlanke Rahmen 3

$app->get('/redirect[/{subject}]', function ($request, $response, $args) { 

}); 

Wenn ich eine Anfrage an /redirect/server?site=local&name=john

mache ich die subject bekommen kann direkt mit

$request->getAttribute('subject') 

Allerdings kann ich die Abfrageparameter nicht abrufen. Wenn ich $request->getQueryParams() inspizieren ich:

[ 
    '/redirect/server?site' => 'local', 
    'name' => 'john' 
] 

Während ich würde die Abfrage params erwarten sein

[ 
    'site' => 'local', 
    'name' => 'john' 
] 

Was mache ich falsch? Vielleicht sollte ich angeben, dass der URL-Parameter kein Fragezeichen akzeptieren darf?

bearbeiten 1

frage ich habe meine Webserver Konfiguration zu veröffentlichen. Ich werde morgen Zugriff auf diese Dev-Maschine haben, also ist dies nur eine Erinnerung an mich, diese Informationen hinzuzufügen. Aber @jmattheis gab mir schon einen Hinweis.

Slim Framework 3 setup for nginx sagt etwas entlang der Linien

location/{ 
     try_files $uri /index.php$is_args$args; 
    } 

Während ich das Umschreiben Schnipsel bin mit, die für schlanke 2 zu einem bestimmten Zeitpunkt vorgeschlagen werden verwendet, um:

location/{ 
     try_files $uri $uri/ /index.php?$request_uri; 
    } 

Diese Konfiguration funktioniert hat für mich seit Jahren gut, aber es passiert, dass ich nie versucht habe zu parsen, was auch immer nach dem Fragezeichen kam. Es ist gerade jetzt, dass ich ein verlassenes Projekt gespalten habe, das ich versuche, rohe $_REQUEST zu Slim-Routing-Methoden zu transformieren.

Edit 2

Die Code-Basis für das Projekt ist im Repo phpPgAdmin6. Es ist im Grunde eine Verzweigung von phpPgAdmin, die keine Route-Logik hatte, also versuche ich, Anforderungen und Antworten in einem bestimmten Umfang zu zentralisieren, und analysiere die Abfragezeichenfolge mit nativen Slim-Methoden.

+0

Welche schlanke Version, für mich funktioniert alles wie erwartet. – jmattheis

+0

Version 3.8.1, ich führe die App in einem Unterordner des Stammverzeichnisses des Dokuments aus, aber das sollte keinen Unterschied machen, oder? – amenadiel

+0

Bitte posten Sie Ihre.htaccess-Datei – jmattheis

Antwort

2

Wie Sie herausgefunden, was Sie brauchen

location/{ 
    try_files $uri /index.php$is_args$args; 
} 

zu verwenden, statt

location/{ 
    try_files $uri $uri/ /index.php?$request_uri; 
} 

Der zweite fügt die ganze Anforderung uri als Abfrageparameter, die in so etwas wie dieses

führen würde
index.php?/redirect/server?site=local&name=john 

deshalb wurde /redirect/server?site als Query-Key angegeben.

+0

Ja, dank deinem Kommentar habe ich diesen Fehler bemerkt. Natürlich klagt Slim darüber nicht, wenn es um benannte Parameter geht, aber der Abfrage-String selbst verhält sich jetzt wirklich anders. Ich explodierte sogar '$ request-> getUri() -> getQuery()' mit dem Fragezeichen, um die Abfragezeichenfolge zu erhalten. Jetzt brauche ich das nicht mehr! Vielen Dank! – amenadiel