Twig命名空间类方法

时间:2016-07-08 08:00:40

标签: php templates twig

我正在尝试将轻量级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; ?>

并且可以访问Localize :: string()?

1 个答案:

答案 0 :(得分:0)

您正在寻找的是extend Twig使用您的自定义方法的一些方法。

使用localhost:3000/page-contain-your-javascript.html函数作为Twig过滤器的示例:

Localize::string()

这会将字符串// 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,这可能更具可读性,具体取决于您的要求。