Как зарегистрировать расширение ветки в 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 ответ

Решение

Итак, я понял следующее:

  1. При автозагрузке вам не нужно требовать / включать файл класса

  2. Название вашего расширения должно начинаться с Twig_Extension_ (например, мне пришлось переименовать мое в Twig_Extension_Test, а не Test_Twig_Extension, как показано в документах)

  3. Убедитесь, что в вашем классе Twig_Extension_Test есть метод getName.

  4. Назовите ваш файл расширения, чтобы быть последней частью имени класса. Так что мой должен был называться Test.php. Я считаю, что это также чувствительный случай.

  5. Поместите этот файл в папку Twig/Extension/

  6. Вызовите $twig->addExtension(new Twig_Extension_Text());

Я обновил свой код в вопросе, чтобы отразить эти шаги

Другие вопросы по тегам