Очистка кеша Symfony для другого приложения

Я хотел бы очистить кэш моего внешнего приложения от действия в моем бэкэнд-приложении.

Как я могу это достичь?

Я считаю, что правильный способ сделать это в symfony 1.2 выглядит следующим образом:

sfContext::switchTo('frontend'); //switch to the environment you wish to clear sfContext::getInstance()->getViewCacheManager()->getCache()->clean(sfCache::ALL); sfContext::switchTo('backend'); //switch back to the environment you started from 

Это работает для меня. Он удаляет все кэшированные файлы из данного каталога:

 $cache_dir = sfConfig::get('sf_cache_dir').'/'.$app.'/'.$env.'/'; $cache = new sfFileCache(array('cache_dir' => $cache_dir)); $cache->clean(); 

Если кто-то ищет очистку одного элемента кэша (одна страница):

 sfContext::switchTo('frontend'); sfContext::getInstance()->getViewCacheManager()->remove("module/action?&param1=value1&param2=value2","THE-DOMAIN-OF-YOUR-FRONTEND-APPLICATION-IF-U-USE-IT-IN-CACHE-KEYS"); sfContext::switchTo('backend'); 

Я не думаю, что нет «чистого» способа выполнить эту работу, поскольку различные приложения рассматриваются как совершенно разделенные среды в symfony. Очевидно, что работа может быть выполнена менее или более грязным способом, выберите способ удалить любой файл в кеш / директории, запустите очистку кеша phing (cc) и т. Д. …

вы можете просто запустить rm -rf cache / *, но вы можете разорвать некоторый запрос клиента. Более простая вещь – запустить Symfony cc через passthru () или exec ()

Вы можете создать экземпляр sfTask и запустить его так (в sf 1.2):

  $task = new sfCacheClearTask(sfContext::getInstance()->getEventDispatcher(), new sfFormatter()); $arguments = array(); // type can be one of: i18n, routing, template, module, config $options = array( 'frontend' => 'app', 'routing' => 'type', 'prod' => 'env', ); $task->run($arguments, $options); 

Для всех возможных аргументов и опций см. Исходный код соответствующей sfTask …