Фильтр Symfony для запуска до и, возможно, пропустить контроллер - PullRequest
3 голосов
/ 22 декабря 2010

Идея желаемого фильтра состоит в том, чтобы проверить memcached для содержимого страницы с URL-адресом в качестве ключа и, если он найден, вернуть его клиенту напрямую из кеша и вообще пропустить контроллер.Хранение будет сделано в отдельном фильтре, который является легкой частью.Я знаю, что мог бы написать это в preExecute () действия, но фильтры предложили бы более элегантное решение (могли бы отключить их для dev envs).

Другими словами - есть ли разумный способ для фильтра выдвинутьответ клиенту и переход к действию?

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Реализовать такой фильтр довольно просто. На самом деле подобное решение существует в Symfony.

Посмотрите на фильтр кэширования по умолчанию ( sfCacheFilter класс). Это делает что-то похожее на то, что вы ищете.

Альтернативный путь

Уже возможно использовать memcache напрямую, изменив кеширование файлов по умолчанию на memcache.

В вашем файле фабрики вы можете переключать драйвер кэша (apps / yourapp / config / factories.yml или config / factories.yml):

all:
  view_cache:
    class: sfMemcacheCache

Вы можете сделать то же самое с memcached, но так как symfony не предоставляет класс sfMemcachedCache, вам придется реализовать его самостоятельно.

Таким образом, вы можете повторно использовать существующую инфраструктуру кэширования и использовать файлы cache.yml.

0 голосов
/ 23 декабря 2010

Я бы посоветовал вам взглянуть на перезапись sfExecutionFilter.

Это последний фильтр в default filters.yml, что означает, что он выполняется первым.Это то, что отвечает за вызов метода executeXXX вашего действия и загрузку связанного представления и множества других вещей.

Предположительно, вы можете написать свой собственный фильтр extends sfExecutionFilter и перезаписать его функциональность, чтобы пропустить выполнение контроллера, если выводcached.

Вы можете найти фильтры по умолчанию filters.yml @% SYMFONY_DIR% / config / config / filters.yml

...