Hy,
所以我继承了一个使用APC作为缓存机制的symfony 1.3.8应用程序。即便如此,我仍然使用
禁用了缓存default:
enabled: false
with_layout: false
lifetime: 86400
密钥*.symfony.routing.data
的条目仍然保存。
每次我打开指向PDF文档的链接$host/$app/erhebung/13398/ausweise.pdf
我使用插件生成,第二次打开该链接时出现错误:
Action "erhebung/13398" does not exist., referer: …
缓存执行 - 在第一次调用之后 - 包含序列化值
array(2) {
'parse_/erhebung/13398/ausweise.pdf_b0d96fa30dcf0130d6a4b26f14f44bfb' =>
array(3) {
'name' =>
string(7) "default"
'pattern' =>
string(18) "/:module/:action/*"
'parameters' =>
array(3) {
'module' =>
string(8) "erhebung"
'action' =>
string(5) "13398"
'ausweise.pdf' =>
bool(true)
}
}
'generate__4d783133e9aa851733d16cf1d1750ad5_b0d96fa30dcf0130d6a4b26f14f44bfb' =>
string(1) "/"
}
这似乎是错误的路由模式,它应该是:
erhebung_ausweise:
url: /erhebung/:id/ausweise.pdf
param: { module: erhebung, action: ausweise }
requirements: { id: \d+ }
而不是:
default:
url: /:module/:action/*
当我手动清除APC缓存时,我可以再次生成并打开PDF。
答案 0 :(得分:0)
Okey,我花了几天时间来解决这个问题,我使用了xhprof
,因为xdebug
和print_debug_backtrace
等其他工具无效。
我将描述导致该问题的原因。
同一个网址被路由两次。首先运行正确的请求处理程序,然后错误地运行。我的前任使用本地cross_app_url
- 函数来读取另一个应用程序的路由配置。在此过程中,uri再次被解析,结果(使用默认路由找不到任何内容)被缓存(再次)。因此,第二次将uri称为第一次路由到请求处理程序faild,从而导致错误。
我希望如果有人遇到同样的问题,他会发现这比我更容易。