我有问题。我正在使用苗条,我的主页有路线:
$app->get('/', function() use ($app) { ...
在我的一个控制器中,我想重定向到主页面,所以我写了
$app->response->redirect('/', 303);
但是我没有重定向到'/'路由,而是被重定向到我的本地服务器的根目录http://localhost/
我做错了什么?我该如何使用重定向方法?
答案 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()方法接受两个参数:
- 路线名称
- 路由模式占位符和替换值的关联数组[3]
醇>
<强>参考文献:强>
答案 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)
我认为使用./代替/也可以。