2016-05-10 10 views
1

これは既に回答がある質問ですが、どれも私のために働いていません。私が使用することはできませんいくつかの理由について:PHP Slim - リダイレクトが機能しない

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

OR

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

ルート「ホーム」に定義されていますが、何らかの理由でスリムはちょうど空の200応答を返しています。私が間違っていることはありますか?

EDIT: 全コード:

$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; 
}); 

これはただで/ gensession空白のページに私を残します。スリムは200(OK)を返します。エラーはありません。出力はありません。

の.htaccess

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

EDIT 2: $ APP-の出力>応答は次のとおりです。

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) } 

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

ので、レスポンスオブジェクトが明確に含まれている場合これらのプロパティは、なぜクライアントに返されませんか?

+0

は、それはあなたがしなければ$ APP->( '/ホーム')をリダイレクト動作していません。または$ app-> response-> redirect( '/ home'); ? –

+0

いいえ、動作していません。しかし、私が質問で言及しなかった何かは私が前にリダイレクトすることができたということです。スリムリダイレクトを止めるには何かをしたに違いない。それは何でしょうか? –

+0

エラーがありますか? use($ app)を使いますか? –

答えて

0

実際の答え:私はパスセッションの保存を変更以外に何をしたか

ないアイデアを、それ今すぐ動作します。私はちょうどそれが他の人のために後で役に立つかもしれないので、ただの答えを受け入れることに決めました。すべてのあなたの提案をありがとうございます。 - Crazy Redd

+0

(質問にコメントに隠されています) – Tim

-1

あなたがそうのようなリダイレクトを返す必要があります:

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

残念ながら、これはうまくいきません。私は '$ app-> response-> setStatus(500);も動作しないことも発見しました。ページはまだ200を返します。 –

0

問題はmiddelwareかもしれません。

私は明らかに(私の知る限り)適切に書かれていませんでした(ミドルウェア)、slim-minifyを使用していた -

オリジナルコード(抜粋):

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); 
    } 

の使用に注意してください$next($request,$response)。スリムでは$応答は不変です(変数を変更することはできません)ので、変数を$next()関数の戻り値で上書きする必要があります。

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

$next($request,$response); 
関連する問題