Folgendes Problem:
Benutzt wird ein Framework, welches auf PHP5.3 aufbaut und dementsprechend auch Namespaces verwendet. Als Template-Engine soll Twig benutzt werden, welches aber noch keine Namespaces unterstützt. Wenn ich nun aus dem Framework heraus Twig-Klassen aufrufen möchte sagt PHP es kenne die Klasse nicht.
Beispiel:
Die Klasse Twig_Loader_Filesystem implementiert aber das Interface Twig_LoaderInterface, das durch den Autoloader auch korrekt gefunden wird, allerdings nicht aufgerufen werden kann, da ihm kein \ vorangestellt ist.
Kann ich dieses Problem irgendwie umgehen, ohne den Code von Twig anpassen zu müssen?
Benutzt wird ein Framework, welches auf PHP5.3 aufbaut und dementsprechend auch Namespaces verwendet. Als Template-Engine soll Twig benutzt werden, welches aber noch keine Namespaces unterstützt. Wenn ich nun aus dem Framework heraus Twig-Klassen aufrufen möchte sagt PHP es kenne die Klasse nicht.
Beispiel:
PHP-Code:
class CTwig extends AEngine implements IEngine
{
/**
* twig environment
* @var Twig_Environment
*/
private $twig = null;
/**
* create twig template engine instance
* @param string $pSection
*/
public function __construct($pSection = 'default')
{
parent::__construct($pSection);
spl_autoload_register(array(__CLASS__,'loadClass'));
$loader = new \Twig_Loader_Filesystem($this->TEMPLATE_DIR);
$options = array('cache' => $this->COMPILE_DIR);
$this->twig = \Twig_Environment($loader, $options);
}
/**
* class loader for twig classes
* @param string $pClass twig class
*/
public function loadClass($pClass)
{
$twigDir = \Savant\CBootstrap::$EXT_DIR . \DIRECTORY_SEPARATOR . 'Twig' . \DIRECTORY_SEPARATOR . 'lib';
$pClass = \array_reverse(\explode('\\', $pClass));
$twigFile = $twigDir . \DIRECTORY_SEPARATOR . str_replace('_', \DIRECTORY_SEPARATOR, $pClass[0]) . '.php';
if(!\file_exists($twigFile))
{
throw new ETwig("can't find Twig class in %s", $twigFile);
}
require_once $twigFile;
}
Kann ich dieses Problem irgendwie umgehen, ohne den Code von Twig anpassen zu müssen?
Kommentar