Symfony 1:获取新应用app配置参数失败问题咨询
这种情况我之前踩过坑!大概率是你的新应用配置没有被正确加载,咱们一步步排查:
确认你在正确的应用上下文里操作
Symfony每个应用的配置是相互独立的,如果你在frontend或者其他应用的请求/任务里调用sfConfig::get("app_actions"),肯定读不到mynewapp的配置。- 如果是网页请求,要确保访问的是
mynewapp对应的前端控制器(比如web/mynewapp.php); - 如果是命令行任务,要么把任务绑定到
mynewapp,要么在任务代码里手动初始化该应用的配置:$configuration = ProjectConfiguration::getApplicationConfiguration('mynewapp', 'dev', true); sfContext::createInstance($configuration); // 现在就能正常读取配置了 $actions = sfConfig::get('app_actions');
- 如果是网页请求,要确保访问的是
检查app.yml的语法正确性
YAML对缩进和格式要求非常严格,哪怕一个制表符或者缩进错误,Symfony都会默默忽略这个配置文件。比如正确的格式应该是:all: app_actions: login: true logout: false仔细检查你的文件有没有用空格(不是制表符)缩进,键值对的层级是否对齐。
清除应用缓存
Symfony会把配置文件编译缓存起来,如果你刚修改了app.yml,旧的缓存可能还在生效。执行命令清除mynewapp的缓存:php symfony cc mynewapp或者直接清空整个项目缓存:
php symfony cc确认settings.yml没有禁用app.yml加载
打开/apps/mynewapp/config/settings.yml,检查是否存在自定义的加载配置,比如:all: .loader: param: config_files: [settings.yml, security.yml]如果
config_files里没有包含app.yml,就会导致配置不加载。默认情况下Symfony会自动加载app.yml,所以如果有这个配置,把app.yml添加进去即可。验证前端控制器的正确性
检查web/mynewapp.php(如果是生产环境可能是web/mynewapp_prod.php)里的代码是否正确初始化了mynewapp的配置:require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); $configuration = ProjectConfiguration::getApplicationConfiguration('mynewapp', 'prod', false); sfContext::createInstance($configuration)->dispatch();确保第一个参数是
mynewapp,对应你的应用名称。
先从上下文检查和清除缓存这两点入手,这两个是最常见的原因!
内容的提问来源于stack exchange,提问作者Edhrendal

