清除另一个应用程序的Symfony缓存

时间:2009-08-25 11:22:19

标签: php caching symfony1

我想从后端应用程序中的操作中清除前端应用程序的缓存。

我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:8)

我认为在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

答案 1 :(得分:4)

这对我有用。它从给定目录中删除所有缓存的文件:

$cache_dir = sfConfig::get('sf_cache_dir').'/'.$app.'/'.$env.'/';

$cache = new sfFileCache(array('cache_dir' => $cache_dir));
$cache->clean();

答案 2 :(得分:1)

如果有人正在寻找清除一个缓存项目(一页):

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');

答案 3 :(得分:0)

我不认为没有“干净”的方式来完成这项工作,因为不同的应用程序在symfony中被视为完全分离的环境。 显然,工作可能会以更少或更脏的方式完成,选择删除缓存/目录中任何文件的方式,运行phing任务 clear-cache(cc)等......

你可以简单地运行rm -rf cache / *,但你可以打破一些客户端请求。 更简单的方法是通过passthru()exec()

运行 symfony cc

答案 4 :(得分:0)

你可以创建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的源代码...