Нет, встроенного способа очистки кэша нет, но вместо изменения основного файла ветки у меня есть другое решение этой проблемы.Просто создайте свой собственный Environment
, который расширяет Twig_Environment
и настройте функцию writeCacheFile
и создайте экземпляр для своего пользовательского экземпляра, а не по умолчанию Twig_Environment
.
class Environment extends \Twig_Environment {
protected function writeCacheFile($file, $content){
$this->createDirectoryTree(dirname($file));
parent::writeCacheFile($file, $content);
chmod($file,0664);
}
protected function createDirectoryTree($folder) {
if (is_dir($folder)) return;
$folder = str_replace('/', DIRECTORY_SEPARATOR, $folder);
$branches = array_filter(explode(DIRECTORY_SEPARATOR, $folder));
$tree = DIRECTORY_SEPARATOR;
if (strpos($folder, 'httpdocs') !== false) while(!empty($branches) && strpos($tree, 'httpdocs') === false) $tree .= array_shift($branches).DIRECTORY_SEPARATOR;
while(is_dir($tree)) $tree .= array_shift($branches).DIRECTORY_SEPARATOR;
array_unshift($branches, pathinfo($tree, PATHINFO_FILENAME));
$tree = realpath(dirname($tree)).DIRECTORY_SEPARATOR;
if ($tree === null) return;
$old_mask = umask(0);
while(!empty($branches)) {
$tree .= array_shift($branches).DIRECTORY_SEPARATOR;
if (!@file_exists($tree)) @mkdir($tree, 0775);
}
umask($old_mask);
}
}
примечание: использование 0777
в качестве прав доступа к файлу считается потоком безопасности и не рекомендуется