Skip to content

Adds event "twigLoaderPreInit.customize" #32

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 11, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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