eclipxe / engineworks-templates
带有插件的PHP模板
Requires
- php: >=7.3
Requires (Dev)
- phpunit/phpunit: ^9.5
- psr/http-message: ^1.0
- rector/rector: ^0.13.10
- slim/psr7: ^1.5
- slim/slim: ^4.9
Suggests
- psr/http-message: ^1.0
- slim/psr7: ^1.5
- slim/slim: ^4.9
README
这个库仅用于运行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
。它简单地使用 directory 加 name + 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
创建一个 urlqry($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 & 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以获取详细信息,并不要忘记查看TODO和CHANGELOG文件。
版权和许可
EngineWorks\Templates
库的版权©Carlos C Soto,许可使用MIT许可证(MIT)。有关更多信息,请参阅LICENSE。