我正在尝试将轻量级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()?
答案 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
,这可能更具可读性,具体取决于您的要求。