Caching Symfony过滤器在控制器之前运行,可能会跳过控制器

Caching Symfony过滤器在控制器之前运行,可能会跳过控制器,caching,symfony1,filter,symfony-1.4,Caching,Symfony1,Filter,Symfony 1.4,所需过滤器的思想是检查memcached中是否有以url为键的页面内容,如果找到,则直接从缓存返回给客户端,并完全跳过控制器。存储将在单独的过滤器中完成,这是最简单的部分。我知道我可以将其写入action的preExecute(),但过滤器将提供更优雅的解决方案(可以为开发环境关闭它们) 换句话说,有没有一种聪明的方法可以让过滤器将响应推送到客户端并跳过操作?实现这样的过滤器非常简单。实际上,symfony中也存在类似的解决方案 查看默认缓存过滤器(sfCacheFilter类)。它正在做一些类

所需过滤器的思想是检查memcached中是否有以url为键的页面内容,如果找到,则直接从缓存返回给客户端,并完全跳过控制器。存储将在单独的过滤器中完成,这是最简单的部分。我知道我可以将其写入action的preExecute(),但过滤器将提供更优雅的解决方案(可以为开发环境关闭它们)


换句话说,有没有一种聪明的方法可以让过滤器将响应推送到客户端并跳过操作?

实现这样的过滤器非常简单。实际上,symfony中也存在类似的解决方案

查看默认缓存过滤器(sfCacheFilter类)。它正在做一些类似于你正在寻找的东西

备选路径

通过将默认文件缓存更改为memcache,已经可以直接使用memcache

在工厂文件中,您可以切换缓存驱动程序(apps/yourapp/config/factories.yml或config/factories.yml):

您可以对memcached执行相同的操作,但由于symfony不提供sfMemcachedCache类,因此您必须自己实现它


通过这种方式,您可以重用现有的缓存框架并利用cache.yml文件。

我建议您考虑一下覆盖sfExecutionFilter

它是default filters.yml中的最后一个过滤器,这意味着它是第一个执行的过滤器。 这就是负责调用操作的executeXXX方法并加载相关视图和其他内容的原因

假设您可以编写自己的过滤器扩展sfExecutionFilter并覆盖其功能,以便在缓存输出时跳过执行控制器


你可以找到默认的filters.yml@%SYMFONY_DIR%/config/config/filters.yml

FWIW,我还没有深入研究SYMFONY 2,但这正是它设计的目的。我需要对我的应用程序中的缓存进行更多的控制(成对url/代理分组等)因此,我将写入memcached部分设置为filter,并将读取移动到preExecute()。尽管如此,仍在努力。。一切完成后,我会接受你的回答。谢谢我认为这是正确的答案。我的做法与我自己有所不同,但考虑使用你的建议重构我的逻辑。
all:
  view_cache:
    class: sfMemcacheCache