替代php silex模板

时间:2015-07-19 15:36:18

标签: php symfony twig template-engine silex

最近我一直在使用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,但它并没有真正让我信服,因为它似乎对我想达到的目标不方便。

谢谢!

1 个答案:

答案 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(...));