如何使用sfTemplateEngine在Symfony 1.4中渲染和获取纯PHP文件的输出(非部分输出)

本文概述

有时在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的目录中:

Symfony 1.4 sfTemplateEngine结构

在我们的项目中, 它将具有以前的结构, 但是你可以根据需要更改它, 但是不要忘记在下一步中更改路径。

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”的视图作为响应。

编码愉快!

来源:

https://www.srcmini02.com/60365.html

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?