创建扩展
默认扩展
为了组织自定义标记和修饰符,您可以创建一个扩展。事实上,Smarty 本身的大部分内容被组织成了两个扩展
- 核心扩展,它提供诸如
{if}
、{for}
和{assign}
等基本语言标记。 - 默认扩展,它提供所有默认修饰符,例如
|escape
、|nl2br
和|number_format
,以及默认启用的标记,例如{html_image}
、{mailto}
和{textformat}
,但并非一定是通用的。
** 提示 **
还有“BCPluginsAdapter”扩展,它不会新增任何功能,但是会封装对已弃用方法(如
Smarty\Smarty::addPluginsDir()
和Smarty\Smarty::loadFilter()
)的调用。
编写自己的扩展
为了编写自己的自定义扩展,您必须编写一个实现 Smarty\Extension\ExtensionInterface
的类。但是,通常情况下扩展 Smarty\Extension\Base
会更容易,它为 Smarty\Extension\ExtensionInterface
要求的每种方法提供空实现。这允许您仅覆盖所需的方法。
示例
<?php
use Smarty\Extension\Base;
class MyExtension extends Base {
public function getModifierCompiler(string $modifier): ?\Smarty\Compile\Modifier\ModifierCompilerInterface {
switch ($modifier) {
case 'array_escape': return new MyArrayEscapeModifierCompiler();
case 'array_unescape': return new MyArrayUnescapeModifierCompiler();
}
return null;
}
}
<?php
use Smarty\Extension\Base;
class MyCallablePassThroughExtension extends Base {
public function getModifierCallback(string $modifierName) {
if (is_callable($modifierName)) {
return $modifierName;
}
return null;
}
}
编写扩展允许您向 Smarty 语言添加一组标签、块标签和修饰符。它还允许您以结构化方式注册预置过滤器、后置过滤器和输出过滤器。smarty/smarty
目录中 src/Extension/
中的文件应该能为您提供编写自己的扩展所需的所有信息。
注册扩展
编写扩展后,将其添加到 Smarty 实例,如下所示
这会将 MyCustomExtension
添加到扩展列表的末尾,这意味着您无法覆盖 Smarty 默认扩展中的标签或修饰符。
如果您要将扩展插入扩展列表顶部,或创建仅包含核心扩展的非常有限的 Smarty 版本,则可以使用 Smarty\Smarty::setExtensions()
覆盖扩展列表。