备选 php silex 模板
Alternative php silex template
最近我一直在使用 template manager for silex, but I've noticed that it's been abandoned and no longer works for newer versions of silex. Here's an example code of what it does (it can be seen on its 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');
所以,它到底做的是渲染你给的文件,你也可以给其他参数在渲染之前将它发送到文件...这对我很有用,但正如我所说, 它已被废弃,不再适用于较新版本的 Silex。
所以,我要问的是:它是适用于较新版本的一个很好的替代方案吗?我应该降级我的 Silex 以便能够使用它吗?还是很难尝试 "create" 一个能够使用它的系统?
我听说过Twig,但它并没有真正说服我,因为它似乎不方便我想要实现的目标。
谢谢!
只需扩展 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;
}
);
那么你就一如既往地使用twig。 $app['twig']->render('template.twig', array(...));
文件系统加载器将在 /path/to/dir1 中查找模板,如果它们不存在,它将回退到 [=33 中查找它们=]等等。
如果您坚持使用纯 PHP 模板引擎,您可以使用 Symfony 模板组件来实现:
安装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(...));
最近我一直在使用 template manager for silex, but I've noticed that it's been abandoned and no longer works for newer versions of silex. Here's an example code of what it does (it can be seen on its 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');
所以,它到底做的是渲染你给的文件,你也可以给其他参数在渲染之前将它发送到文件...这对我很有用,但正如我所说, 它已被废弃,不再适用于较新版本的 Silex。
所以,我要问的是:它是适用于较新版本的一个很好的替代方案吗?我应该降级我的 Silex 以便能够使用它吗?还是很难尝试 "create" 一个能够使用它的系统?
我听说过Twig,但它并没有真正说服我,因为它似乎不方便我想要实现的目标。
谢谢!
只需扩展 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;
}
);
那么你就一如既往地使用twig。 $app['twig']->render('template.twig', array(...));
文件系统加载器将在 /path/to/dir1 中查找模板,如果它们不存在,它将回退到 [=33 中查找它们=]等等。
如果您坚持使用纯 PHP 模板引擎,您可以使用 Symfony 模板组件来实现:
安装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(...));