如何在Twile中使用PHP模板引擎而不是Silex 2中的Twig语法

时间:2017-02-13 21:34:09

标签: php symfony twig silex

在Silex2中,我可以使用Twig模板,但我想使用Twig的PHP引擎,而不是Twig语法。例如,this guide描述了如何为Symfony而不是 Silex 2

我的Silex index.php看起来像:

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => __DIR__.'/views',
));

$app->get('/', function() use ($app) {
    return $app['twig']->render('index.html.php', array(
        'name' => 'Bob',
    ));
});

我的index.html.php看起来像是:

<p>Welcome to the index <?php echo $view->name; ?></p>

当我在浏览器中运行应用程序并查看源代码时,我会看到尚未执行的文字字符串<?php echo $view->name; ?>

我怀疑可能有一个Twig配置设置告诉它我想使用PHP样式模板。为了澄清,如果我使用Twig语法,例如:

<p>Welcome to the index {{ name }} </p>

然后它工作,我看到名称Bob,因此我知道这不是Web服务器或PHP配置问题。

这段代码对我不起作用:

$app['template'] = function($app) use($settings) {
    $loader = new \Symfony\Component\Templating\Loader\FilesystemLoader([
        BASE_DIR . $settings->templates_path
    ]);
    $nameParser = new \Symfony\Component\Templating\TemplateNameParser();
    $templating = new \Symfony\Component\Templating\PhpEngine($nameParser, $loader);
    return $templating;
};
但是,这也不起作用:

$app->register(new NS\ViewServiceProvider(), [
    'view.path' => BASE_DIR . $settings->templates_path,
]);

ViewServiceProvider

class ViewServiceProvider implements ServiceProviderInterface
{
    public function register(Container $app)
    {
        $app['view'] = function($app) {
            $engine  = $app['view.engine'];
            $helpers = isset($app['view.helpers']) ? $app['view.helpers'] : array();
            $helpers = array_merge($helpers, $app['view.default_helpers']);
            $engine->setHelpers($helpers);
            return $engine;
        };
        $app['view.engine'] = function($app) {
            return new PhpEngine($app['view.parser'], $app['view.loader']);
        };
        $app['view.loader'] = function($app) {
            $paths = isset($app['view.path']) ? $app['view.path'] : array();
            return new FileSystemLoader($paths);
        };
        $app['view.parser'] = function() {
            return new TemplateNameParser;
        };
        $app['view.default_helpers'] = function() {
            return array(
                new \Symfony\Component\Templating\Helper\SlotsHelper
            );
        };
    }
}

两者都抛出错误,找不到view.php文件

0 个答案:

没有答案