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

Rus*_*our 4 silex

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

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

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

任何指针都感激地收到了.

罗素

Fra*_*ste 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');
});
Run Code Online (Sandbox Code Playgroud)

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

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

  • 是.我做了类似的事情.我唯一要改变的是直接从`before`函数返回一个`Response`对象,而不是注册一个`/ maintenance`路由.这样一来,用户就无法偶然发现它. (2认同)