如何使用slim重定向

时间:2014-05-01 08:24:48

标签: php redirect slim

我有问题。我正在使用苗条,我的主页有路线:

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

在我的一个控制器中,我想重定向到主页面,所以我写了

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

但是我没有重定向到'/'路由,而是被重定向到我的本地服务器的根目录http://localhost/

我做错了什么?我该如何使用重定向方法?

9 个答案:

答案 0 :(得分:18)

Slim允许您为路由命名,然后使用urlFor()根据此名称重定向回路由。在您的示例中,将路线更改为:

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

然后您的重定向变为:

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

有关详细信息,请参阅Slim文档中的Route Helpers

答案 1 :(得分:13)

From Slim3 docs http://www.slimframework.com/docs/start/upgrade.html

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

答案 2 :(得分:10)

超薄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

答案 3 :(得分:4)

给你的' /'路由一个名字,

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

这应该为您提供正确的重定向网址

http://docs.slimframework.com/routing/names/ http://docs.slimframework.com/routing/helpers/#redirect

答案 4 :(得分:3)

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

答案 5 :(得分:2)

对于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()的第二个参数传递来提供其他参数,例如:$this->router->pathFor('viewPost', ['id' => 1]);

  

路由器的pathFor()方法接受两个参数:

     
      
  1. 路线名称
  2.   
  3. 路由模式占位符和替换值的关联数组[3]
  4.   

<强>参考文献:

  1. Changed Redirect
  2. urlFor() is now pathFor() in the router
  3. Route names

答案 6 :(得分:1)

苗条4:

$response->withHeader('Location', '/redirect/to');

或代替固定字符串:

use Slim\Routing\RouteContext;

$routeParser = RouteContext::fromRequest($request)->getRouteParser();
$url = $routeParser->urlFor('login');

return $response->withHeader('Location', $url);

苗条文档:http://www.slimframework.com/docs/v4/objects/response.html#returning-a-redirect RouteContext:https://discourse.slimframework.com/t/redirect-to-another-route/3582

答案 7 :(得分:0)

我认为我遇到了类似的问题,问题出在我的 .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]

答案 8 :(得分:0)

我认为使用./代替/也可以。