我正在尝试转换一个轻量级的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')
,这可能更具可读性,具体取决于您询问的对象。