2016-05-10 12 views
1

Ich weiß, das ist eine Frage, die bereits Antworten hat, aber keiner von ihnen hat für mich gearbeitet. Aus irgendeinem Grund kann ich nicht verwenden:PHP Slim - Redirect funktioniert nicht

$app->redirect($app->urlFor('home')); 

ODER

$app->response->redirect($app->urlFor('home')); 

Der Weg ‚nach Hause‘ definiert ist, aber aus irgendeinem Grund Slim nur eine leere 200-Antwort zurück. Gibt es etwas, was ich falsch mache?

EDIT: Voll Code:

$app->get('/gensession', function() use ($app){ 
    // set up session; this works 
    // if I echo anything here, it'll output on the page 
    $app->redirect('/'); // This doesn't work, neither does urlFor(<name>) 
    return; 
}); 

Dies lässt mich nur auf eine leere Seite an/gensession. Slim gibt 200 (OK) und sonst nichts zurück. Keine Fehler. Keine Leistung.

.htaccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [QSA,L] 

EDIT 2: Die Ausgabe der Antwort $ app-> ist:

object(Slim\Http\Response)#113 (5) { ["status":protected]=> int(302) ["headers"]=> object(Slim\Http\Headers)#115 (1) { ["data":protected]=> array(2) { ["Content-Type"]=> string(9) "text/html" ["Location"]=> string(1) "/" } } ["cookies"]=> object(Slim\Http\Cookies)#116 (2) { ["defaults":protected]=> array(6) { ["value"]=> string(0) "" ["domain"]=> NULL ["path"]=> NULL ["expires"]=> NULL ["secure"]=> bool(false) ["httponly"]=> bool(false) } ["data":protected]=> array(0) { } } ["body":protected]=> string(0) "" ["length":protected]=> int(0) } 

Hinweis: ["status":protected]=> int(302) und ["Location"]=> string(1) "/"

Also, wenn das Antwortobjekt enthält eindeutig Warum werden diese Eigenschaften nicht an den Client zurückgegeben?

+0

Funktioniert es, wenn Sie tun $ app-> umleiten ('/ home'); oder $ app-> response-> redirect ('/ home'); ? –

+0

Nein, es funktioniert nicht. Etwas, das ich in der Frage nicht erwähnt habe, ist jedoch, dass ich vorher umleiten konnte. Ich muss etwas getan haben, um die Slim-Weiterleitung zu stoppen. Was könnte das sein? –

+0

Haben Sie einen Fehler? Benutzt du ($ app)? –

Antwort

0

tatsächliche Antwort:

Keine Ahnung, was ich anderes tat als Änderung der Speicherpfad der Session, aber es funktioniert jetzt. Ich entschied mich, die einzige Antwort zu akzeptieren, da sie später für andere hilfreich sein könnte. Vielen Dank für all Ihre Vorschläge. - Crazy Redd

+0

(Versteckt in den Kommentaren zu der Frage.) – Tim

-1

Sie sollten die Umleitung zurückkehren wie so:

$app->get('/gensession', function() use ($app){ 
    return $app->redirect('/'); 
}); 
+1

Leider funktioniert das auch nicht. Ich habe auch gefunden, dass $ app-> response-> setStatus (500); auch nicht funktioniert. Seite gibt immer noch 200 zurück. –

0

Das Problem kann middelware sein.

Ich war mit slim-minify (Middleware), die offenbar nicht richtig geschrieben wurde (soweit ich das beurteilen kann) -

Originalcode (Snippet):

public function __invoke(Request $request, Response $response,callable $next) 
    { 
     $next($request,$response); 
     $oldBody = $response->getBody(); 
     $minifiedBodyContent = $this->minifyHTML((string)$oldBody); 
     $newBody = new Body(fopen('php://temp', 'r+')); 
     //write the minified html content to the new \Slim\Http\Body instance 
     $newBody->write($minifiedBodyContent); 
     return $response->withBody($newBody); 
    } 

Beachten Sie die Verwendung von . In Slim ist die $ -Antwort unveränderlich (Sie können die Variable nicht ändern), so dass Sie die Variable mit dem Rückgabewert der $next()-Funktion überschreiben müssen.

$response = $next($request,$response); 

nicht

$next($request,$response);