gpt4 book ai didi

php - 使用 Twig PHP 模板引擎构建站点

转载 作者:可可西里 更新时间:2023-11-01 12:29:54 25 4
gpt4 key购买 nike

我已通读 Twig 的文档,但我不太明白如何将这些点联系起来。

假设我创建了一个文件 index.php,它实例化了 Twig_Loader_FilesystemTwig_Environment 类。我可以使用 loadTemplate() 在这里加载一个模板。

单个页面内容存储在 .phtml.html.twig 文件中,这些文件可能链接到站点上的其他页面。但是,它们总是会链接到另一个 .php 文件,而不是模板。

抽象此过程的最佳方法是什么,以便我只需要一个 php 文件用于多个模板?访问权限?某种路由器类?有没有例子?

最佳答案

如果您使用多个 PHP 文件,那么创建模板渲染器类是明智的,它将引导 Twig 类,设置选项并负责查找和渲染请求的模板:

<?php
// Use correct path to Twig's autoloader file
require_once '/path/to/lib/Twig/Autoloader.php';
// Twig's autoloader will take care of loading required classes
Twig_Autoloader::register();

class TemplateRenderer
{
public $loader; // Instance of Twig_Loader_Filesystem
public $environment; // Instance of Twig_Environment

public function __construct($envOptions = array(), $templateDirs = array())
{
// Merge default options
// You may want to change these settings
$envOptions += array(
'debug' => false,
'charset' => 'utf-8',
'cache' => './cache', // Store cached files under cache directory
'strict_variables' => true,
);
$templateDirs = array_merge(
array('./templates'), // Base directory with all templates
$templateDirs
);
$this->loader = new Twig_Loader_Filesystem($templateDirs);
$this->environment = new Twig_Environment($this->loader, $envOptions);
}

public function render($templateFile, array $variables)
{
return $this->environment->render($templateFile, $variables);
}
}

请勿复制粘贴,这只是一个示例,您的实现可能会根据您的需要而有所不同。将此类保存在某处

用法

我将假设您的目录结构与此类似:

/home/www/index.php
/home/www/products.php
/home/www/about.php

在网络服务器的根目录下创建目录(在本例中为 /home/www):

/home/www/templates # this will store all template files
/home/www/cache # cached templates will reside here, caching is highly recommended

将模板文件放在templates 目录下

/home/www/templates/index.twig
/home/www/templates/products.twig
/home/www/templates/blog/categories.twig # Nested template files are allowed too

现在示例 index.php 文件:

<?php
// Include our newly created class
require_once 'TemplateRenderer.php';

// ... some code

$news = getLatestNews(); // Pulling out some data from databases, etc
$renderer = new TemplateRenderer();
// Render template passing some variables and print it
print $renderer->render('index.twig', array('news' => $news));

其他 PHP 文件将类似。

注意事项

更改设置/实现以满足您的需要。您可能希望限制对 templates 目录的 Web 访问(或者甚至将其放在外面的某个地方),否则每个人都可以下载模板文件。

关于php - 使用 Twig PHP 模板引擎构建站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9842342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com