最近我一直在使用template manager for silex,但我注意到它已被放弃,不再适用于较新版本的silex。这是一个示例代码(它可以在GitHub page上看到):
<?php
use Herrera\Template\TemplateServiceProvider;
use Silex\Application;
$app = new Application();
$app->register(new TemplateServiceProvider(), array(
'template.dir' => '/path/to/dir',
'template.dir' => array(
'/path/to/dir1',
'/path/to/dir2',
'/path/to/dir3',
)
));
$app['template.engine']->render('test.php');
所以,它究竟做的是它渲染你给出的文件,你还可以提供其他参数在渲染之前将它发送到文件......这对我来说非常有用,但正如我所说,它& #39; s已经被废弃,它不再适用于较新版本的Silex 所以,我要问的是:它是否适用于较新版本?我应该降级我的Silex以便能够使用它吗?或者是否很难尝试创造&#34;一个能够使用它的系统?
我已经听说过Twig,但它并没有真正让我信服,因为它似乎对我想达到的目标不方便。
谢谢!
答案 0 :(得分:4)
只需扩展twig加载器(Twig_Loader_Filesystem)即可获得相同的结果。
$app['twig.loader.filesystem'] = $app->share(
$app->extend('twig.loader.filesystem', function($loader, $app) {
$loader->addPath('/path/to/dir1');
$loader->addPath('/path/to/dir2');
$loader->addPath('/path/to/dir3');
return $loader;
}
);
然后你就像往常一样使用树枝。 $app['twig']->render('template.twig', array(...));
文件系统加载器将在 / path / to / dir1 中查找模板,如果它们不存在,它将回退以在 / path / to / dir2 等等。
如果您坚持使用纯PHP模板引擎,可以使用Symfony Templating Component:
使用composer symfony / templating 安装,然后注册该服务:
use Symfony\Component\Templating\PhpEngine;
use Symfony\Component\Templating\TemplateNameParser;
use Symfony\Component\Templating\Loader\FilesystemLoader;
$app['templating'] = $app->share(function() {
$loader = new FilesystemLoader(array(
'/path/to/dir1',
'/path/to/dir2',
'/path/to/dir3',
));
$nameParser = new TemplateNameParser();
$templating = new PhpEngine($nameParser, $loader);
return $templating;
});
然后您只需将此引擎用作$app['templating']->render('template.php', array(...));