本文概述
有时在Symfony 1.4项目中, 你将需要将具有特定内容的自定义模板呈现为特殊内容, 例如HTML不会出现在网站的任何部分, 而是出现在电子邮件, 通知等上。该项目中的部分内容非常有用并可能在某种程度上满足了这种需求, 但是有一种更好的方法可以完全不依赖框架的各个部分。
在本文中, 我们将向你介绍如何在Symfony 1.4中正确安装和使用sfTemplateEngine。
1.下载模板插件Symfony 1.4
第一步, 可以从中获取模板类的源代码, 这是Symfony 1.4文档网站上的文章和教程。你将找到仅使用诸如sfTemplateLoaderFilesystem或sfTemplateEngine之类的示例, 但是它们假定你已经具有这些类。如果像我一样在此框架中担任新手, 则需要知道与sfTemplateEngine相关的类本身并未包含在项目中。你可以使用Git下载代码:
git clone https://github.com/fabpot-graveyard/templating.git
或者只是从Github的官方存储库中下载模板的源代码。在我们的例子中, 我们将代码下载到Symfony 1.4的根插件目录中名为templating的目录中:
在我们的项目中, 它将具有以前的结构, 但是你可以根据需要更改它, 但是不要忘记在下一步中更改路径。
2.启用模板引擎
现在我们有了自动加载器文件, 其中包括Symfony 1.4模板引擎的类, 你可以使用require_once在项目配置文件(yourproject / config / ProjectConfiguration.class.php)中启用它:
<?php
require_once dirname(__FILE__) . '/../symfony-1.4.20/lib/autoload/sfCoreAutoload.class.php';
// 1. In this file register the autoloader of the template engine using the following line:
// Note the path where we downloaded the plugin, yours can be different !
require_once dirname(__FILE__) . '/../plugins/templating/lib/sfTemplateAutoloader.php';
// 2. And enable the sfTemplate
sfTemplateAutoloader::register();
sfCoreAutoload::register();
class ProjectConfiguration extends sfProjectConfiguration {
public function setup() {
// Your original code
}
}
此步骤中的技巧是在项目配置中包括/templating/lib/sfTemplateAutoloader.php文件, 并从sfTemplateAutoloader类执行静态方法寄存器。
3.如何使用模板引擎
第一步, 要使用渲染引擎, 你将需要一个特定的路径来存储要渲染的模板。在本例中, 我们会将模板存储在Symfony 1.4的原始模板目录中, 该目录可从sf_app_template_dir常量(project / apps / frontend / templates)中检索。在此目录中, 我们将创建一个子目录, 即电子邮件, 该子目录将存储我们将使用模板引擎呈现的模板。例如, 我们将有一个模板, 即mail_message.php文件, 其中包含以下内容:
<html>
<head>
<title>Test sfTemplateEngine</title>
</head>
<body>
<h1><?php echo $message . " ". $name; ?></h1>
</body>
</html>
要使用插件渲染此模板, 我们将通过项目中的简单控制器来完成此工作:
<?php
class indexActions extends sfActions {
/**
* Example action that will return a response to the browser.
*
* @param sfWebRequest $request
* @return Response
*/
public function executeIndex(sfWebRequest $request) {
// 1. Create the templates loader (provide the path to the templates as first argument)
// note that the %name% wildcard will be replaced during the render method.
$loader = new sfTemplateLoaderFilesystem(sfConfig::get('sf_app_template_dir').'/emails/%name%.php');
// 2. Create the Template Engine with the created loader
$templateEngine = new sfTemplateEngine($loader, array(
'php' => new sfTemplateRendererPhp()
));
// 3. Render some template (mail_message.php) sending the parameters in the second array
$generatedHTML = $templateEngine->render("mail_message", array(
'message' => 'Hello', 'name' => 'Carlos'
));
// 4. In this example, we will return a response to the browser with the generated HTML
return $this->renderText($generatedHTML);
}
}
此操作将在浏览器中返回带有输出” Hello Carlos”的视图作为响应。
编码愉快!
评论前必须登录!
注册