如何在PHP中注册twig扩展

时间:2016-11-01 16:03:34

标签: php twig twig-extension

我目前正在使用twig standalone(不使用symphony或composer),并且没有在文档中找到如何在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';
}

}
?>

我收到以下错误:

  

致命错误:   界面&#39; Twig_ExtensionInterface&#39;找不到   第12行的C:\ xampp \ htdocs \ Twig \ Extension.php

我发现用yaml设置的文章的音调,但我没有使用yaml。

我确信我没有正确注册,或者没有正确设置。

1 个答案:

答案 0 :(得分:1)

所以我想出的是以下内容:

  1. 自动加载时,您不需要/包含类文件

  2. 您的扩展程序的名称应以 Twig_Extension _ 开头(例如,我必须将我的名称重命名为Twig_Extension_Test,而不是像某些时间显示的文档那样重命名为Test_Twig_Extension)

  3. 确保您的Twig_Extension_Test类中包含getName方法。

  4. 将您的扩展文件命名为类名的最后一部分。因此我必须被称为Test.php。我相信这也是一个案例敏感。

  5. 将此文件放入Twig / Extension /文件夹

  6. 调用$ twig-&gt; addExtension(new Twig_Extension_Text());

  7. 我已更新问题中的代码以反映这些步骤