Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony应用程序的运行时配置_Php_Symfony - Fatal编程技术网

Php Symfony应用程序的运行时配置

Php Symfony应用程序的运行时配置,php,symfony,Php,Symfony,我想在Symfony应用程序中添加一个“维护模式”——我在运行时设置的一个简单的布尔配置。控制器(或者可能是前端控制器)可以检查该值,并且;正常处理请求,或返回HTTP 503和友好消息 我可以想出3种可能的解决方案: 参数。yml 这是放置配置的合理位置,但它会被Symfony应用程序缓存,使用维护模式可能需要缓存:清除才能生效。我想避免这种情况 自定义配置文件 它可以查找是否存在“maintenance.flag”或读取自定义文件中的设置。这会为每次访问控制器添加额外的磁盘操作,而且效率低

我想在Symfony应用程序中添加一个“维护模式”——我在运行时设置的一个简单的布尔配置。控制器(或者可能是前端控制器)可以检查该值,并且;正常处理请求,或返回HTTP 503和友好消息

我可以想出3种可能的解决方案:

  • 参数。yml 这是放置配置的合理位置,但它会被Symfony应用程序缓存,使用维护模式可能需要
    缓存:清除
    才能生效。我想避免这种情况

  • 自定义配置文件 它可以查找是否存在“maintenance.flag”或读取自定义文件中的设置。这会为每次访问控制器添加额外的磁盘操作,而且效率低下

  • 环境变量 它可以使用
    getenv()
    查找维护模式环境变量的存在和值。这感觉像是一个有效的方法,我想不出任何负面影响


有没有人找到一种有效的方法来实现这种功能?我是在重新发明轮子吗?

有一个非常好的symfony捆绑包。看看这个

您只需在项目中安装它,然后只需一个命令行即可将站点置于维护模式


您可以设置许多配置,如此状态的持续时间、自定义错误页等

当您询问运行时时,我建议使用webserver conf 看看这个.htaccess方法,它会检查文档根目录下是否有maintenance.html,如果有,它会将所有请求重定向到它,并提供正确的状态代码

    RewriteEngine On

    # Maintenance mode if /maintenance.html is present
    RewriteCond %{DOCUMENT_ROOT}/maintenance.html -f
    RewriteCond %{SCRIPT_FILENAME} !maintenance.html
    RewriteRule ^.*$ /maintenance.html [R=503,L]
    ErrorDocument 503 /maintenance.html

因此,如果您想激活维护模式,只需将文件上载到您的webdir即可

您的webserver配置也是一个不错的选择,只需在维护时指向其他webdir即可,这看起来是一个很棒的捆绑包。它还支持不同的“驱动程序”-可以从文件、内存、memcache、数据库或自定义驱动程序中读取维护标志!但我错过了一些功能,比如在锁定或解锁网站时触发事件。但据我所知,这个捆绑包很容易扩展。。。