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);
    }
}


需要被自动载入的插件 存放位置要求。


如果 你使用的是 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 的方式自动载入命名空间。

Copyright © 2021 海南的叶子 All Rights Reserved 琼ICP备2021000725号

琼公网安备 46900702000037号