2010-12-22 72 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

相關問題