我最近开始使用Silex。我已经将我的应用程序的某些功能组合在一个单独的ControllerProviderInterace中(例如将登录和注册在一起)。Silex路由别名
我的问题是,这些ControllerProviders被“安装”子URL下,如:
$app->mount('/account', new Controller\Account());
我怎么会“别名”,重写或映射某些网址的其他网址。举例来说,我想下面的映射:
/login -> /account/login
我最近开始使用Silex。我已经将我的应用程序的某些功能组合在一个单独的ControllerProviderInterace中(例如将登录和注册在一起)。Silex路由别名
我的问题是,这些ControllerProviders被“安装”子URL下,如:
$app->mount('/account', new Controller\Account());
我怎么会“别名”,重写或映射某些网址的其他网址。举例来说,我想下面的映射:
/login -> /account/login
你可以做这样的事情:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\HttpKernelInterface;
$app->match('/login', function (Request $request) use ($app) {
$subRequest = $request->duplicate(null, null, null, null, null, array('REQUEST_URI' => '/account/login'));
return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
});
我没有实际测试过这一点,所以你可能需要调整它。但是,这是我会采取的方法。基本上是一个转发控制器。
希望有一个更好的方式来做到这一点,但谢谢。这确实是我正在寻找的 – Evert 2012-02-03 01:56:33
我不知道这艘船是否在这条航线上航行,但是你可以在根下安装。例如...
$app->mount('/', new AuthenticationControllerProvider());
然后在AuthenticationControllerProvider,您可以指定路线:
$app->get('/login', function() use ($app) {
// do login things
});
$app->get('/register', function() use ($app) {
// do register things
});
如果你想其他途径来指出这些,你可以设置一个与301这些重定向路由。
我希望这有助于!
我不确定我是否理解你的问题。你想要两个网址来触发同一个控制器吗? – Maerlyn 2012-02-02 21:15:39
igorw说得对,我基本上想动态地将请求转发给其他处理程序。 – Evert 2012-02-03 01:55:59