使用用户实体登录时,我的 Symfony2 项目中出现了臭名昭著的学说"PHP 重命名访问拒绝代码 5"错误:
''app''cache''dev/doctrine/orm/Proxies''__CG__AcmeDemoBundleEntityUser.php): Access is denied. (code: 5)
我会登录正常,如果幸运的话,我可以在会话被杀死之前加载一个页面,因为用户身份验证由于此错误而失败。 它只发生在这一个实体上。
我的同事,具有相同的设置和相同的项目,具有相同的错误,但对于不同的实体(并且仅该实体)。
这个问题之前已经在这里报告过,并链接到Doctrine的GitHub上的错误,该错误已确认从2.5开始修复(在Doctrine ORM 2.5发行说明中确认)。
我的Symfony2项目正在运行Doctrine ORM 2.5.4,但我仍然遇到同样的错误。
尝试的修复
- 重新安装 XAMPP;
- 删除项目并从 git 中提取项目;
- 更新的供应商项目(也许保留了一个旧的 Doctrine ORM 包);
- 关闭 PHPStorm(也许它正在锁定文件以进行索引);
- 禁用了 Windows 索引(原因与上述相同)。
在 config_dev.yml 中将auto_generate_proxy_classes
的值从 %kernel.debug%
更改为 false
可以防止问题,但这会隐藏问题而不是修复它。
有没有人设法真正解决这个问题?
您是否尝试过为 AbstractProxyFactory::
AUTOGENERATE_EVAL 或 AbstractProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS 设置auto_generate_proxy_classes
的基础常量值。
根据本文档部分 高级配置>自动生成代理类 这应该可以解决开发环境中的访问被拒绝问题。
此外,还应确保生产配置遵循以下建议:
在生产环境中,强烈建议使用AUTOGENERATE_NEVER以获得最佳性能。其他选项在开发环境中很有趣。