Я хотел бы очистить кэш моего внешнего приложения от действия в моем бэкэнд-приложении.
Как я могу это достичь?
Я считаю, что правильный способ сделать это в 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?¶m1=value1¶m2=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 …