Внутренности ветки: setCompiler

У меня возникают проблемы при правильном переходе от компилятора по умолчанию к пользовательскому компилятору. Похоже, я не правильно создаю класс или объект.

От http://twig.sensiolabs.org/doc/internals.html
«Компилятор по умолчанию (Twig_Compiler) можно изменить, вызвав метод setCompiler (): $ twig-> setCompiler ($ compiler);»

Вот где я пытаюсь изменить компилятор:

\Twig_Autoloader::register();
$loader = new \Twig_Loader_Filesystem($templateDirectory);
$twig = new \Twig_Environment($loader);

$compiler = new Config_Generator_Twig_Compiler($twig);
$twig->setCompiler($compiler);

Но я получаю эту ошибку:

Фатальная ошибка PHP Catchable: аргумент 1 передан
Twig_Node_Module :: compile () должен быть экземпляром Twig_Compiler,
задан экземпляр Config_Generator_Twig_Compiler, вызванный в
/config_generator/Config_Generator_Twig_Compiler.php в строке 87 и
определено в /config_generator/lib/Twig/Node/Module.php в строке 36


«Config_Generator_Twig_Compiler.php» — это просто копия файла Twig «Compiler.php» с измененной парой строк вверху:

<?php
require_once $rootDirectory.'/lib/Twig/CompilerInterface.php'; <---- added this line

class Config_Generator_Twig_Compiler implements Twig_CompilerInterface <---- changed from "class Twig_Compiler implements Twig_CompilerInterface"

Остальная часть этого файла в настоящее время совпадает с «Compiler.php»:

{...
public function compile(Twig_NodeInterface $node, $indentation = 0)
{
$this->lastLine = null;
$this->source = '';
$this->sourceOffset = 0;
// source code starts at 1 (as we then increment it when we encounter                                     new lines)
$this->sourceLine = 1;
$this->indentation = $indentation;

if ($node instanceof Twig_Node_Module) {
$this->filename = $node->getAttribute('filename');
}

$node->compile($this); <---- here's line 87

return $this;
}
...}

2

Решение

$twig->setCompiler($object) нужно это $object расширяет или является Twig_Compiler,
Итак, ваш класс должен его расширить.

class Config_Generator_Twig_Compiler extends Twig_Compiler
{

[... your code here ...]

}

Twig_Compiler уже реализует Twig_CompilerInterface,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]