Как зарегистрировать расширение ветки в PHP
В настоящее время я использую Twig Standalone (не с симфонией или композитором) и не могу найти в документации о том, как зарегистрировать расширение в php.
Мой файл index.php выглядит так
<?php
include 'exts/ext.php';
require_once 'Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('views');
$twig = new Twig_Environment($loader);
$twig->addExtension(new Test_Twig_Extension())
echo $twig->render('index.twig');
?>
Мой класс расширения выглядит так (ext.php)
<?php
//require_once 'Twig/Extension.php';
//require_once 'Twig/ExtensionInterface.php';
class Test_Twig_Extension extends Twig_Extension {
public function getFunctions() {
return array(
new Twig_SimpleFunction('my_function', array($this,'my_function'))
);
}
public function my_function($arg1, $arg2) {
echo "Arg1: {$arg1} and Arg2: {$arg2}";
}
public function getName(){
return 'my_function';
}
}
?>
Я получаю следующую ошибку:
Неустранимая ошибка: интерфейс 'Twig_ExtensionInterface' не найден в C:\xampp\htdocs\Twig\Extension.php в строке 12
Я нашел тонны статей с настройкой yaml, но я не использую yaml.
Я уверен, что я не регистрирую это должным образом или не настроил что-то правильно.
1 ответ
Итак, я понял следующее:
При автозагрузке вам не нужно требовать / включать файл класса
Название вашего расширения должно начинаться с Twig_Extension_ (например, мне пришлось переименовать мое в Twig_Extension_Test, а не Test_Twig_Extension, как показано в документах)
Убедитесь, что в вашем классе Twig_Extension_Test есть метод getName.
Назовите ваш файл расширения, чтобы быть последней частью имени класса. Так что мой должен был называться Test.php. Я считаю, что это также чувствительный случай.
Поместите этот файл в папку Twig/Extension/
Вызовите $twig->addExtension(new Twig_Extension_Text());
Я обновил свой код в вопросе, чтобы отразить эти шаги