4 use Twig\Cache\CacheInterface
;
5 use Twig\Cache\FilesystemCache
;
7 use Twig\Loader\FilesystemLoader
;
9 use Twig\Extra\
String\StringExtension
;
11 if ( !class_exists('\Twig\Loader\FilesystemLoader')) {
12 require_once __DIR__
. '/../galette/vendor/autoload.php';
15 function rmdir_recursive($path){
16 if(!empty($path) && is_dir($path) ){
17 $dir = new RecursiveDirectoryIterator(
19 RecursiveDirectoryIterator
::SKIP_DOTS
21 $files = new RecursiveIteratorIterator(
23 RecursiveIteratorIterator
::CHILD_FIRST
26 foreach ($files as $fpath) {
27 ($fpath->isDir() && !$fpath->isLink()) ?
rmdir($fpath->getPathname()) : unlink($fpath->getPathname());
37 * Return a custom Twig cache handler.
38 * This handler is useful to be able to preserve filenames of compiled files.
40 * @param string $directory
42 * @return CacheInterface
44 function getTwigCacheHandler(string $directory): CacheInterface
46 return new class($directory) extends FilesystemCache
{
48 private string $directory;
50 public function __construct(string $directory, int $options = 0)
52 $this->directory
= rtrim($directory, DIRECTORY_SEPARATOR
) . DIRECTORY_SEPARATOR
;
53 parent
::__construct($directory, $options);
56 public function generateKey(string $name, string $className): string
58 return $this->directory
. $name;
63 $directory = sprintf('%s/../galette/templates/default', __DIR__
);
64 $cache_dir = sprintf('%s/../tempcache', __DIR__
);
65 $cache = getTwigCacheHandler($cache_dir);
66 if (file_exists($cache_dir)) {
67 rmdir_recursive($cache_dir);
71 $iterator = new RecursiveIteratorIterator(
72 new RecursiveDirectoryIterator($directory),
73 RecursiveIteratorIterator
::LEAVES_ONLY
76 $loader = new FilesystemLoader($directory);
77 $twig = new Environment(
81 'auto_reload' => true,
85 $twig->addExtension(new StringExtension());
102 foreach ($twig_functions as $function) {
103 $twig->addFunction(new TwigFunction($function, $function));
106 /** @var SplFileInfo $file */
107 foreach ($iterator as $file) {
108 if ($file->isFile()) {
109 $twig->load(str_replace($directory . '/', '', $file));