4 use Twig\Cache\CacheInterface
;
5 use Twig\Cache\FilesystemCache
;
7 use Twig\Loader\FilesystemLoader
;
10 if ( !class_exists('\Twig\Loader\FilesystemLoader')) {
11 require_once __DIR__
. '/../galette/vendor/autoload.php';
14 function rmdir_recursive($path){
15 if(!empty($path) && is_dir($path) ){
16 $dir = new RecursiveDirectoryIterator(
18 RecursiveDirectoryIterator
::SKIP_DOTS
20 $files = new RecursiveIteratorIterator(
22 RecursiveIteratorIterator
::CHILD_FIRST
25 foreach ($files as $fpath) {
26 ($fpath->isDir() && !$fpath->isLink()) ?
rmdir($fpath->getPathname()) : unlink($fpath->getPathname());
36 * Return a custom Twig cache handler.
37 * This handler is useful to be able to preserve filenames of compiled files.
39 * @param string $directory
41 * @return CacheInterface
43 function getTwigCacheHandler(string $directory): CacheInterface
45 return new class($directory) extends FilesystemCache
{
47 private string $directory;
49 public function __construct(string $directory, int $options = 0)
51 $this->directory
= rtrim($directory, DIRECTORY_SEPARATOR
) . DIRECTORY_SEPARATOR
;
52 parent
::__construct($directory, $options);
55 public function generateKey(string $name, string $className): string
57 return $this->directory
. $name;
62 $directory = sprintf('%s/../galette/templates/default', __DIR__
);
63 $cache_dir = sprintf('%s/../tempcache', __DIR__
);
64 $cache = getTwigCacheHandler($cache_dir);
65 if (file_exists($cache_dir)) {
66 rmdir_recursive($cache_dir);
70 $iterator = new RecursiveIteratorIterator(
71 new RecursiveDirectoryIterator($directory),
72 RecursiveIteratorIterator
::LEAVES_ONLY
75 $loader = new FilesystemLoader($directory);
76 $twig = new Environment(
80 'auto_reload' => true,
99 foreach ($twig_functions as $function) {
100 $twig->addFunction(new TwigFunction($function, $function));
103 /** @var SplFileInfo $file */
104 foreach ($iterator as $file) {
105 if ($file->isFile()) {
106 $twig->load(str_replace($directory . '/', '', $file));