2012-02-02 144 views
1

我最近开始使用Silex。我已经将我的应用程序的某些功能组合在一个单独的ControllerProviderInterace中(例如将登录和注册在一起)。Silex路由别名

我的问题是,这些ControllerProviders被“安装”子URL下,如:

$app->mount('/account', new Controller\Account()); 

我怎么会“别名”,重写或映射某些网址的其他网址。举例来说,我想下面的映射:

/login -> /account/login 
+0

我不确定我是否理解你的问题。你想要两个网址来触发同一个控制器吗? – Maerlyn 2012-02-02 21:15:39

+0

igorw说得对,我基本上想动态地将请求转发给其他处理程序。 – Evert 2012-02-03 01:55:59

回答

5

你可以做这样的事情:

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); 
}); 

我没有实际测试过这一点,所以你可能需要调整它。但是,这是我会采取的方法。基本上是一个转发控制器。

+0

希望有一个更好的方式来做到这一点,但谢谢。这确实是我正在寻找的 – Evert 2012-02-03 01:56:33

1

我不知道这艘船是否在这条航线上航行,但是你可以在根下安装。例如...

$app->mount('/', new AuthenticationControllerProvider()); 

然后在AuthenticationControllerProvider,您可以指定路线:

$app->get('/login', function() use ($app) { 
    // do login things 
}); 

$app->get('/register', function() use ($app) { 
    // do register things 
}); 

如果你想其他途径来指出这些,你可以设置一个与301这些重定向路由。

我希望这有助于!