树枝命名空间类方法


Twig namespace class methods

我正在尝试转换一个轻量级的MVC框架,以使用Twig作为模板引擎,而不仅仅是在控制器中包含php文件。这将允许我在一个核心下创建多个网站布局文件夹,并允许客户操作模板。

我已经让 Twig 工作了,但我对命名空间和它的类有问题。

此框架在每个template.php文件中使用它自己的命名空间,从而可以访问多个类。其中之一是本地化类Localize,它有一个方法string。我想通过 Localize::string() 方法传递 Twig 模板中的所有字符串,但我该怎么做呢?

在控制器中,我有:

$loader = new 'Twig_Loader_Filesystem([$path]);
$twig = new 'Twig_Environment($loader);
echo $twig->render($file, $data);

我尝试使用:

$loader->addPath($path, 'Namespace');

没有运气。在模板中:

{{ Localize.string('string') }} 

该方法应该返回字符串或翻译,但不返回任何内容,这意味着它不起作用。我可以以某种方式将所有模板添加到命名空间中吗

<?php namespace Namespace; ?>

并可以访问 本地化::字符串() ?

您正在寻找某种扩展 Twig 以使用自定义方法的方法。

Localize::string()函数用作 Twig 过滤器的示例:

// In your controller
$filter = new Twig_SimpleFilter('localize', function ($string) {
    return Localize::string($string);
});
$twig->addFilter($filter);
// Then in your .twig file
{{ 'some_string'|localize }}

这会将字符串'some_string'传递给自定义localize筛选器,然后返回Localize::string('some_string') .

<小时 />

由于Twig_SimpleFilter构造函数将callable作为其参数,因此您也可以编写$filter = new Twig_SimpleFilter('localize', 'Localize::string'),这可能更具可读性,具体取决于您询问的对象。