2010-12-22 93 views
3

想要的过滤器的想法是检查memcached的页面内容与url作为关键,如果找到,直接从缓存返回到客户端并完全跳过控制器。存储将在单独的过滤器中完成,这是简单的部分。我知道我可以将它写入action的preExecute(),但过滤器会提供更优雅的解决方案(可以关闭dev dev)。Symfony过滤器之前运行并可能跳过控制器

换句话说 - 过滤器是否有一种智能的方式将响应推送到客户端并跳过去执行操作?

+0

FWIW,我还没有深深钻研尚未进入的symfony 2,但这是哪门子的事情,它是被设计。 – Nathan 2010-12-22 18:33:39

回答

0

我建议你看看覆盖sfExecutionFilter。

这是默认filters.yml中的最后一个过滤器,这意味着它是第一个被执行的过滤器。 这是负责调用您的动作的executeXXX方法和加载相关的视图和其他一堆事情。

大概你可以编写你自己的过滤器扩展sfExecutionFilter并覆盖它的功能来跳过执行控制器它的输出被缓存。

您可以找到默认filters.yml @%SYMFONY_DIR%/配置/配置/ filters.yml

+0

我会查找它 – dsomnus 2010-12-25 23:05:02

2

实现这样的过滤器很容易。实际上类似的解决方案存在于symfony中。

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

替代路径

它已经可以直接的memcache通过更改默认的文件缓存到内存缓存使用。

在你的工厂文件你可以切换高速缓存驱动器(应用/ yourapp /配置/ factories.yml文件或配置/ factories.yml文件):

all: 
    view_cache: 
    class: sfMemcacheCache 

你可以做同样的memcached的但symfony不提供sfMemcachedCache类,你必须自己实现它。

这样你就可以重用现有的缓存框架并利用cache.yml文件。

+0

我需要更多的控制我的应用程序中的缓存(配对url /代理组等),所以我设置写入memcached部分过滤和移动读出preExecute()。尽管如此,仍然在努力..一旦完成了所有工作,我们都会接受你的回答。谢谢! – dsomnus 2010-12-22 23:08:34