Php Symfony应用程序的运行时配置
我想在Symfony应用程序中添加一个“维护模式”——我在运行时设置的一个简单的布尔配置。控制器(或者可能是前端控制器)可以检查该值,并且;正常处理请求,或返回HTTP 503和友好消息 我可以想出3种可能的解决方案:Php Symfony应用程序的运行时配置,php,symfony,Php,Symfony,我想在Symfony应用程序中添加一个“维护模式”——我在运行时设置的一个简单的布尔配置。控制器(或者可能是前端控制器)可以检查该值,并且;正常处理请求,或返回HTTP 503和友好消息 我可以想出3种可能的解决方案: 参数。yml 这是放置配置的合理位置,但它会被Symfony应用程序缓存,使用维护模式可能需要缓存:清除才能生效。我想避免这种情况 自定义配置文件 它可以查找是否存在“maintenance.flag”或读取自定义文件中的设置。这会为每次访问控制器添加额外的磁盘操作,而且效率低
- 参数。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、数据库或自定义驱动程序中读取维护标志!但我错过了一些功能,比如在锁定或解锁网站时触发事件。但据我所知,这个捆绑包很容易扩展。。。