Slimframework 3 重定向在控制器中不起作用
Slimframework 3 Redirect not working in controller
我遇到了 slim v3.11.0 的重定向问题。当我在路由中或从中间件调用重定向时,它按预期工作。但是,当我从我的控制器调用它时,它不会重定向也不会出错。任何帮助将不胜感激!谢谢!
*参考 https://www.slimframework.com/docs/v3/start/upgrade.html#changes-to-redirect
路线示例(有效)
$app->get('/login/', function ($request, $response, $args) use($app) {
return $response->withRedirect('/new-url');
});
中间件示例(有效)
$auth = function ($request, $response, $next) {
if (!isset($_SESSION['Account'])) {
return $response->withStatus(302)->withHeader('Location', '/new-url/');
}
};
控制器示例(无工作)
$app->get('/login/', function ($request, $response, $args) use($app) {
return (new Login($app))->TestLoginRedirect();
});
....
class Login {
protected $App;
public function __construct($app){
$this->App = $app;
}
public function TestLoginRedirect(){
return $this->App->getContainer()->response->withRedirect('/new-url');
}
}
其他重定向代码段尝试
return $this->App->getContainer()->response->withStatus(301)->withHeader('Location', '/new-url/');
return $this->App->redirect('/', '/new-url/');
在您的控制器示例中,路由回调必须 return 响应对象,但它不是 returning 任何东西。应该改为:
$app->get('/login/', function ($request, $response, $args) use($app) {
return (new Login($app))->TestLoginRedirect();
});
我遇到了 slim v3.11.0 的重定向问题。当我在路由中或从中间件调用重定向时,它按预期工作。但是,当我从我的控制器调用它时,它不会重定向也不会出错。任何帮助将不胜感激!谢谢!
*参考 https://www.slimframework.com/docs/v3/start/upgrade.html#changes-to-redirect
路线示例(有效)
$app->get('/login/', function ($request, $response, $args) use($app) {
return $response->withRedirect('/new-url');
});
中间件示例(有效)
$auth = function ($request, $response, $next) {
if (!isset($_SESSION['Account'])) {
return $response->withStatus(302)->withHeader('Location', '/new-url/');
}
};
控制器示例(无工作)
$app->get('/login/', function ($request, $response, $args) use($app) {
return (new Login($app))->TestLoginRedirect();
});
....
class Login {
protected $App;
public function __construct($app){
$this->App = $app;
}
public function TestLoginRedirect(){
return $this->App->getContainer()->response->withRedirect('/new-url');
}
}
其他重定向代码段尝试
return $this->App->getContainer()->response->withStatus(301)->withHeader('Location', '/new-url/');
return $this->App->redirect('/', '/new-url/');
在您的控制器示例中,路由回调必须 return 响应对象,但它不是 returning 任何东西。应该改为:
$app->get('/login/', function ($request, $response, $args) use($app) {
return (new Login($app))->TestLoginRedirect();
});