本文概述
开发人员之间关于是否在PHP项目中使用模板引擎的观点极富争议性, 而且并非易事。不喜欢诸如Smarty或Twig之类的模板引擎的开发人员可以自由地思考他们想要的东西并按需进行, 这意味着, 请继续使用冗长的PHP模板。在Silex中, 由于其简单性, Twig在许多框架中均被用作默认设置, 但是你也可以使用Symfony模板引擎将PHP实施为模板引擎。我们将在本文中向你展示如何实现它, 并且不会在Silex 2中失败。
1.安装Symfony模板引擎
每个具有基本PHP知识的人都可以使用PHP实现自己的silex模板引擎, 但是, 有了Symfony模板引擎, 有一种更好的方法可以做到这一点。 Symfony的模板组件提供了使用纯PHP构建任何类型的模板系统所需的所有工具。它提供了一个基础结构来加载模板文件, 并可以选择监视它们的更改。它还提供了使用PHP的具体模板引擎实现, 以及用于将模板转义和分离为块和布局的其他工具。
要在Silex中使用它, 你需要使用composer和以下命令来安装组件:
composer require symfony/templating
安装该组件后, 你将能够导入开始渲染PHP模板所需的类, 而不是Silex中的Twig。
2.实施模板引擎
如你所知, 你可以轻松地将自定义内容分配给silex的$ app变量, 以这种方式定义了许多组件, 例如twig, db等。以同样的方式, 我们将注册不会覆盖Twig的呈现服务, 因为你可能也需要它(或可能不需要, 但是你可以同时保留两者)。在你的app.php文件(或$ app可用的入口点)中注册该组件:
// ./project/src/app.php
// Include the Symfony Templating Engine required classes
use Symfony\Component\Templating\PhpEngine;
use Symfony\Component\Templating\TemplateNameParser;
use Symfony\Component\Templating\Loader\FilesystemLoader;
// Register the "templating" provider
$app['templating'] = function(){
// Provide the paths where
$loader = new FilesystemLoader(array(
// Assuming that you have the templates inside
// the ./yourproject/phptemplates/ directory:
// Note: %name% needs to be at the end of the path
__DIR__ . '/../phptemplates/%name%'
));
$templating = new PhpEngine(new TemplateNameParser(), $loader);
return $templating;
};
3.使用PHP模板引擎
PHP模板引擎的逻辑保持不变, 你将返回render方法的结果, 该方法期望将要呈现的php文件的名称作为第一个参数, 并将包含名称和变量值的数组作为第二个参数想要传递给视图:
// Register the index route
$app->get('/', function () use ($app) {
// Use the PHP templating engine to render the PHP file
// the path of the file would be originally:
// ./project/phptemplates/index.html.php
return $app['templating']->render('index.html.php', array(
"name" => "Carlos"
));
})->bind('homepage');
考虑到我们的index.html.php文件的内容是以下代码:
echo "Welcome $name!";
?>
在索引路径访问应用程序后, 你会发现” Welcome Carlos!”作为回应。请注意, Symfony的PHP模板引擎提供了许多功能, 如布局, 插槽和自动转义的实现, 因此请确保在此处正式阅读Symfony官方网站上有关该组件的更多信息。
编码愉快!