是否可以在Silex应用程序中使用条件路由?

时间:2014-11-18 16:50:47

标签: silex

我正在编写一个Web应用程序,它有一个前置网站,然后是一个管理控制台。我希望能够设置一个设置,当设置为true意味着在前端网站上显示保留或维护页面。

我的路由配置当前位于yaml文件中,并在每个请求上继续读取。但现在我希望它能够聪明地知道它是否处于维护模式,以及是否将所有路由指向一个特定页面。或者它可以改变路线,以便只有一个。

我认为可以根据设置加载不同的文件来完成,但这意味着所有路由都是静态的,例如无法从数据库中检索。另外,在请求的设置阶段,我在从数据库中读取时遇到了问题。我将系统配置为从DB读取服务,但这在设置阶段似乎不可用,我有错吗?

任何指针都很感激地收到了。

罗素

1 个答案:

答案 0 :(得分:6)

我经常使用Silex的维护页面:

在我定义$app['debug'] = true;的同一个地方,我还定义了另一个用于各种检查的变量$app['maintenance'] = true;

其中我定义了一个维护页面如下:

$app->before(function (Request $request, Application $app) {
    if($app['maintenance']){
        $subRequest = Request::create('/maintenance', 'GET');
        return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
    }
});

$app->get('/maintenance', function () use ($app) {
    // Here you can return your maintenance page
    return $app->render('maintenance.twig');
});

然后,当我打开维护变量时,每个请求都会重定向到维护路由。

正如您所看到的,我不在我的应用程序中使用任何yaml配置文件,但其想法与它们相同。