Skip to content

Commit

Permalink
Adds event "twigLoaderPreInit.customize" that allows manipulation of …
Browse files Browse the repository at this point in the history
…Twig Loaders before Init of Twig Environment.
  • Loading branch information
EvanLovely committed Oct 11, 2016
1 parent a74edca commit 6e3c57f
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 5 deletions.
17 changes: 14 additions & 3 deletions src/PatternLab/PatternEngine/Twig/Loaders/PatternLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,26 @@ public function __construct($options = array()) {
// set-up the loader list in order that they should be checked
// 1. Patterns 2. Filesystem 3. String
$loaders = array();
// 1. add Patterns
$loaders[] = new Twig_Loader_PatternPartialLoader(Config::getOption("patternSourceDir"),array("patternPaths" => $options["patternPaths"]));

// add the paths to the filesystem loader if the paths existed
// 2. add the paths to the filesystem loader if the paths existed
if (count($filesystemLoaderPaths) > 0) {
$filesystemLoader = new \Twig_Loader_Filesystem($filesystemLoaderPaths);
$loaders[] = TwigUtil::addPaths($filesystemLoader, $patternSourceDir);
}

// Setting loaders and giving plugins a chance to manipulate them
TwigUtil::setLoaders($loaders);
// set-up the dispatcher
$dispatcherInstance = Dispatcher::getInstance();
$dispatcherInstance->dispatch("twigLoaderPreInit.customize");
// getting the loaders back
$loaders = TwigUtil::getLoaders();

// 3. add String loader
// This *must* go last or no loaders after will work ~ https://github.com/symfony/symfony/issues/10865
// @todo Remove `Twig_Loader_String` - if a Twig include path is wrong, this outputs the string anyway with no error ~ https://github.com/symfony/symfony/issues/10865
$loaders[] = new \Twig_Loader_String();

// set-up Twig
Expand All @@ -87,8 +100,6 @@ public function __construct($options = array()) {
TwigUtil::loadDebug();
TwigUtil::loadMacros();

// set-up the dispatcher
$dispatcherInstance = Dispatcher::getInstance();
$dispatcherInstance->dispatch("twigLoader.customize");
$dispatcherInstance->dispatch("twigPatternLoader.customize");

Expand Down
44 changes: 42 additions & 2 deletions src/PatternLab/PatternEngine/Twig/TwigUtil.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
class TwigUtil {

protected static $instance = '';

protected static $loaders = array();

/**
* Get an instance of the Twig environment
*
Expand All @@ -46,7 +47,46 @@ public static function setInstance($instance = "") {
}

self::$instance = $instance;


}

/**
* Get an instance of the Twig loaders
*
* @return {Array} List of Twig Loaders
*/
public static function getLoaders() {

if (empty(self::$loaders)) {
return false;
}

return self::$loaders;

}

/**
* Set an instance of the Twig loaders
* @param {Array} List of Twig Loaders
*/
public static function setLoaders($loaders = array()) {

if (empty($loaders)) {
Console::writeError("please set the loaders");
}

self::$loaders = $loaders;

}

/**
* Add a loader to the Twig Loaders array
* @param {Loader} A Twig Loader
*/
public static function addLoader($loader) {

self::$loaders[] = $loader;

}

/**
Expand Down

0 comments on commit 6e3c57f

Please sign in to comment.