web-dev-qa-db-ja.com

スリムリダイレクトの使用方法

私は問題があります。私はスリムを使用しており、メインページのルートがあります:

$app->get('/', function() use ($app) { ... 

コントローラーの1つでメインページにリダイレクトしたいので、

$app->response->redirect('/', 303);

しかし、「/」ルートへのリダイレクトの代わりに、ローカルサーバーのルート(http://localhost/

私は何を間違えていますか?リダイレクト方法はどのように使用すればよいですか?

17
dKab

Slimでは、ルートに名前を付け、urlFor()を使用して、この名前に基づいてルートにリダイレクトすることができます。例では、ルートを次のように変更します。

$app->get('/', function() use ($app) { ... })->name("root");

そして、あなたのリダイレクトは次のようになります:

$app->response->redirect($app->urlFor('root'), 303);

詳細については、Slimドキュメントの Route Helpers を参照してください。

20
Adrian Wragg

Slim3のドキュメントから http://www.slimframework.com/docs/start/upgrade.html

$app->get('/', function ($req, $res, $args) {
  return $res->withStatus(302)->withHeader('Location', 'your-new-uri');
});
16
Gene Bo

スリム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

13
Arthur Araújo

「/」ルートに名前を付け、

$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

5
//Set Default index or home page
$app->get('/', function() use ($app) {
      $app->response->redirect('login.php');
});
3
bamossza

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つの引数を受け入れます。

  1. ルート名
  2. ルートパターンプレースホルダーと置換値の連想配列[3]

参照:

  1. リダイレクトの変更
  2. rlFor()はルーターのpathFor()になりました
  3. ルート名
3
MNR

私は同様の問題に直面したと思う、そして問題は私の。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]
0
Wiston Coronell

/の代わりに./を使用しても動作すると思います。

0