让我的应用程序在localhost上运行,路径为:localhost/silex/web/index.php
,定义了下面代码中的路由,我希望访问localhost/silex/web/index.php/redirect
重定向我到{{ 1}}并显示'foo'。相反,它会将我重定向到localhost/silex/web/index.php/foo
。
我是Silex的新手,也许我弄错了。有人可以解释问题出在哪里吗?它是正确的行为,它应该重定向绝对路径?感谢。
localhost/foo
答案 0 :(得分:23)
redirect
网址要求网址重定向,而不是应用内路由。试试这种方式:
$app->register(new Silex\Provider\UrlGeneratorServiceProvider());
$app->get('/foo', function() {
return new Response('foo');
})->bind("foo"); // this is the route name
$app->get('/redirect', function() use ($app) {
return $app->redirect($app["url_generator"]->generate("foo"));
});
答案 1 :(得分:4)
对于不会更改请求的网址的内部重定向,您还可以使用子请求:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
$app->get('/redirect', function() use ($app) {
$subRequest = Request::create('/foo');
return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
});