eclipxe/engineworks-templates

带有插件的PHP模板

v3.0.0 2022-08-04 02:28 UTC

This package is auto-updated.

Last update: 2024-09-04 07:03:26 UTC


README

Source Code Latest Version Software License Build Status Scrutinizer Coverage Status Total Downloads

这个库仅用于运行PHP模板。类似项目:Slim/Php-View

PHP 本身就是一个强大的模板引擎,你可能不需要像 Twig、Plates 或 Smarty 这样的模板库。这取决于你面临的问题,也许你正在处理一个遗留系统,也许你只是不想使用。

安装

使用 composer 安装此库 composer require eclipxe/engineworks-templates

基本用法

<?php

use EngineWorks\Templates\Callables;
use EngineWorks\Templates\Plugins;
use EngineWorks\Templates\Resolver;
use EngineWorks\Templates\Templates;

// create callables
$callables = new Callables();
$callables->attach(
    new Plugins\HtmlEscape(),
    new Plugins\FormatNumber(),
    new Plugins\Transliterate(),
);

// create resolver
$resolver = new Resolver(__DIR__ . '/templates');

// create templates
$templates = new Templates($callables, $resolver);

// fetch the content of a template (templates/user-details.php)
/* @var $user array */
$content = $templates->fetch('user-details', ['user' => $user]);

// do whatever with the response, I will just echo it
echo $content;

关于对象

EngineWorks\Templates\Templates

这个类作为 Template 对象的工厂,它通过一个常见的 Callables 对象,在一个常见的目录中,使用一个常见的文件扩展名来定位这些对象。

最常用的方法是 fetch。它简单地使用 directoryname + extension 指定的文件创建一个 Template,使用默认的可调用对象。然后会在那个模板上调用 fetch

EngineWorks\Templates\Template

这是库的主要类,它可以独立创建或通过 Templates::create(非静态调用)创建。

EngineWorks\Templates\Template::fetch

fetch 方法接收两个参数,一个模板名称和一个变量数组。它将使用解析器对象解析文件名。它将数组转换为变量(使用 extract),以便使这些变量对文件可访问。

模板内部

模板文件是一个 PHP 文件,它将包含设置给 fetch 方法的所有变量。此外,你还可以使用 $this,它指向 EngineWorks\Templates\Template 对象。

$this 对象提供一些在 Callables 对象中注册的函数,在上面的示例中,$callables 被附加了以下函数

  • e($string, $this->getDefaultHtmlFlags()):作为 html 转义
  • js($string):作为 javascript 转义
  • ejs($string):先作为 html 转义,然后作为 javascript 转义
  • uri($string):作为 uri 转义(参见 rawurlencode
  • url($url, $vars):使用定义的 $vars 创建一个 url
  • qry($vars):使用定义的 $vars 创建一个查询字符串
  • fn($number, $decimals = $this->getDefaultDecimals()):返回一个格式化的数字
  • tr($message, $arguments, $encoder = $this->getDefaultEncoder()):返回一个转义的消息,对于内联模板非常有用,例如 hello {name}, 我已经给你发送了一封电子邮件到 {email}

因此,你可以在模板内部使用这些函数。

此外,你还可以使用 fetch 方法检索另一个模板的内容。

这是一个模板示例 templates/users-list.php

<?php
/**
 * @var $pagename string
 * @var $users array
 */
?>
<h1><?=$this->e($pagename)?></h1>
<ul>
<?php foreach ($users as $user): ?>
    <li>User: <b><?=$this->tr('{fullname} ({nickname})', $user)?></b></li>
<?php endforeach; ?>
</ul>

这是模板调用

<?php
/* @var $templates \EngineWorks\Templates\Templates */
$templates->fetch('users-list', [
    'pagename' => 'List of users & members',
    'users' => [
        ['fullname' => 'John Doe', 'nickname' => 'jdoe'], 
        ['fullname' => 'Carlos C Soto', 'nickname' => 'eclipxe'], 
    ],
]);

这将得到的结果

<h1>List of users &amp; members</h1>
<ul>
    <li>User: <b>John Doe (jdoe)</b></li>
    <li>User: <b>Carlos C Soto (eclipxe)</b></li>
</ul>

集成

与 PSR-7 集成

为了与 PSR-7 兼容的库集成,你可以使用 render 方法。这个方法充当一个装饰器,用于获取模板并将内容写入 ResponseInterface 对象。

只有在你使用 PSR-7 兼容的库时才需要使用此方法。否则,我建议你使用 fetch 方法。由于这是可选的,因此 psr/http-message 包不是 composer 依赖。

与 Slim 4 集成

为了在Slim 4中使用此库,我们提供了一个名为Slim4Plugin的插件,它提供了两种方法

  • pathFor:是\Slim\Interfaces\RouteParserInterface::urlFor方法的快捷方式
  • baseUrl:返回baseUrl属性(从\Slim\App::getBasePath设置)

以下是将插件附加到Callables集合中的常用代码

<?php
/* @var $callables \EngineWorks\Templates\Callables */
/* @var $app Slim\App */
$callables->attach(new \EngineWorks\Templates\Slim\Slim4Plugin(
    $app->getRouteCollector()->getRouteParser(),
    $app->getBasePath()
));

兼容性

版本2.x与PHP 5.4或更高版本兼容。它不再维护。版本3.x与PHP 7.3或更高版本兼容。

贡献

欢迎贡献!请阅读CONTRIBUTING以获取详细信息,并不要忘记查看TODOCHANGELOG文件。

版权和许可

EngineWorks\Templates库的版权©Carlos C Soto,许可使用MIT许可证(MIT)。有关更多信息,请参阅LICENSE