在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
文件