registerModifier 自定义修饰器
修饰器在Sdopx 模板引擎中,主要用于变量输出时对变量进行数据修饰的功能。
系统内置了一些修饰器,以及具体用法 请查看修饰器
这里主要介绍如何自定义修饰器
编写修饰器
修饰器在 Sdopx 模板引擎中也是一个类,需要实现 render 方法 第一个参数为 修饰变量本身,其后面的参数对应与修饰器参数。
一个简单的修饰器例子:
define('ROOT_DIR', __DIR__);
date_default_timezone_set('PRC');
require(ROOT_DIR . '/vendor/autoload.php');
use sdopx\Sdopx;
//定义修饰器 replace
class Replace
{
public function render($string, $search, $replace)
{
return str_replace($search, $replace, $string);
}
}
//注册修饰器
Sdopx::registerModifier('replace', new Replace());
$sdopx = new Sdopx();
//设置模板目录
$sdopx->setTemplateDir('./view');
//设置编译代码存放目录
$sdopx->setCompileDir('./runtime');
//注册变量
$sdopx->assign('name', 'wj008');
//显示模板
$sdopx->display('index.tpl');
自动装载修饰器
修饰器的自动加载过程 和 插件类似,也有命名要求,直接注册的无命名要求。
1 需要被自动载入的插件命名要求。
需要自动载入的插件命名必须为大驼峰形式的类名 其类名后缀必须是 Modifier 结尾,文件名与类名必须保持一致。
如:
class Replace //无效,没有以Modifier 结尾,找不到。
class replaceModifier //无效,类名不是大驼峰,找不到。
class My_ReplaceModifier //无效,类名不可出现下划线。
class MyReplaceModifier //有效,但是 插件使用时是 {$value|my_replace} 而不是 {$value|myReplace} 或者 {$value|myreplace}
class ReplaceModifier // 有效 插件使用是 {$value|hello}
文件名 如 ReplaceModifier.php
2 需要被自动载入的插件 命名空间必须是 namespace sdopx\plugin;
Sdopx 是有命名空间要求的,所以需要被自动载入插件的类,必须是在 sdopx\plugin 下的。
如:
ReplaceModifier.php
namespace sdopx\plugin;
class ReplaceModifier
{
public function render($string, $search, $replace)
{
return str_replace($search, $replace, $string);
}
}
3 需要被自动载入的插件 存放位置要求。
如果 你使用的是 composer 自动加载路径,那么 你只要在你的 composer.json 文件中指定 sdopx/plugin 命名空间的对应目录即可。
如:
composer.json
{
.... 你的其他配置信息
"autoload": {
"psr-4": {
"sdopx\\plugin\\": "myplugin",
}
},
.... 你的其他配置信息
}
这个时候 你可以把你的插件放入跟目录下的 myplugin 文件夹中,并且运行 composer update
如果上例子 存放路径为 /myplugin/ReplaceModifier.php
如果你不使用 composer 那么 你需要用 Sdopx::setPluginDir(); 来设置你插件的存放路径
使用代码如下:
define('ROOT_DIR', __DIR__);
date_default_timezone_set('PRC');
require(ROOT_DIR . '/sdopx/Sdopx.php');
use sdopx\Sdopx;
Sdopx::$defaultTemplateDirs = './view';
Sdopx::$defaultCompileDir = './runtime';
//设置自定义插件存放路径
Sdopx::setPluginDir('./myplugin');
$sdopx = new Sdopx();
$sdopx->assign('name', 'wj008');
$sdopx->display('index.tpl');
在这里 我们依然建议您使用 composer 的方式自动载入命名空间。