私は問題があります。私はスリムを使用しており、メインページのルートがあります:
$app->get('/', function() use ($app) { ...
コントローラーの1つでメインページにリダイレクトしたいので、
$app->response->redirect('/', 303);
しかし、「/」ルートへのリダイレクトの代わりに、ローカルサーバーのルート(http://localhost/
私は何を間違えていますか?リダイレクト方法はどのように使用すればよいですか?
Slimでは、ルートに名前を付け、urlFor()
を使用して、この名前に基づいてルートにリダイレクトすることができます。例では、ルートを次のように変更します。
$app->get('/', function() use ($app) { ... })->name("root");
そして、あなたのリダイレクトは次のようになります:
$app->response->redirect($app->urlFor('root'), 303);
詳細については、Slimドキュメントの Route Helpers を参照してください。
Slim3のドキュメントから http://www.slimframework.com/docs/start/upgrade.html
$app->get('/', function ($req, $res, $args) {
return $res->withStatus(302)->withHeader('Location', 'your-new-uri');
});
スリム3
$app->get('/', function ($req, $res, $args) {
$url = 'https://example.org';
return $res->withRedirect($url);
});
リファレンス: https://www.slimframework.com/docs/v3/objects/response.html#returning-a-redirect
「/」ルートに名前を付け、
$app = new \Slim\Slim();
$app->get('/', function () {
echo "root page";
})->name('root');
$app->get('/foo', function () use ($app) {
$app->redirect($app->urlFor('root') );
});
$app->run();
これにより、リダイレクトする正しいURLが得られるはずです。
http://docs.slimframework.com/routing/names/http://docs.slimframework.com/routing/helpers/#redirect
//Set Default index or home page
$app->get('/', function() use ($app) {
$app->response->redirect('login.php');
});
Slim v3.xの場合:
$response->withStatus(302)->withHeader('Location', $url);
の代わりに$app->redirect();
を使用します
Slim v2.xでは、ヘルパー関数$ app-> redirect()を使用します。リダイレクト要求をトリガーします。 Slim v3.xでは、そのようにResponseクラスを使用しても同じことができます(次の例を参照)[1]。
pathFor()
の代わりにurlFor()
を使用します。
urlFor()はpathFor()に名前が変更され、ルーターオブジェクトで見つけることができます。また、pathFor()はベースパスを認識します[2]。
例:
$app->get('/', function ( $request, $response, $args ) use ( $app ) {
$url = $this->router->pathFor('loginRoute');
return $response->withStatus(302)->withHeader('Location', $url);
});
注:パラメータ名と値の連想配列をpathFor()
の2番目の引数として渡すことで、追加パラメータを提供できます。$this->router->pathFor('viewPost', ['id' => 1]);
。
ルーターのpathFor()メソッドは2つの引数を受け入れます。
- ルート名
- ルートパターンプレースホルダーと置換値の連想配列[3]
参照:
私は同様の問題に直面したと思う、そして問題は私の。htaccess設定ファイルにあった。実際には次のようになります。
RewriteEngine On
RewriteBase /api #if your web service is inside a subfolder of your app,
# you need to pre-append the relative path to that folder, hope this helps you!
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
/の代わりに./を使用しても動作すると思います。