yakub / simple-templating
PHP 简单模板
v1.3
2020-06-25 10:17 UTC
Requires
- php: ^7.1
Requires (Dev)
README
PHP 简单模板。您可以用字符串替换并使用基本的 PHP 函数。
构建状态
安装
推荐通过 Composer 安装
composer require yakub/simple-templating
示例
简单用法
<?php $output = \Yakub\SimpleTemplating\Replace::compile( 'Hi {{userName}}, you selected this options {{fn.implode(', ', options)}}', [ 'userName' => 'Jakub' 'options' => [ 'PHP', 'SQL' ] ] ); echo $output; // Output: "Hi Jakub, you selected this options PHP, SQL"
参数
\Yakub\SimpleTemplating\Replace::compile($template, $scope, $flags);
- $template - 使用语法编写的字符串模板
- $scope - 关联数组
- $flags - 替换的额外选项 - USE_URLENCODE - 每个替换的字符串都将通过
rawurlencode()
编码
语法
可用语法示例
字符串数据
作用域数据
["name" => "Jakub Miškech"]
- '{{name}}' -> 'Jakub Miškech'
- '{{fn.strtoupper(name)}}' - 'JAKUB MIŠKECH'
- '{{name[0]}}' - 'J'
- '{{fn.ucwords('hello world')}}' - 'Hello World'
- '{{fn.urlencode(name)}}' - 'Jakub+Mi%C5%A1kech'
时间数据
作用域数据
["strtotimeValue" => "yesterday"]
- '{{fn.date('Y-m-d H:i:s')}}' -> '2020-04-27 17:01:31'
- '{{fn.time()}}' -> '1580140891'
- '{{fn.strtotime(strtotimeValue)}}' -> '1579993200'
- '{{fn.strtodate('yesterday')}}' -> '2020-04-26 00:00:00'
- '{{fn.strtodate('yesterday', 'Y-m-d')}}' -> '2020-01-26'
数字数据
作用域数据
["numberA" => "1.4"]
- '{{fn.round(1.5)}}' -> '2'
- '{{fn.round(numberA)}}' -> '1'
- '{{fn.rand(0, 100)}}' -> '41'
数组数据
作用域数据
[ "map" => ["typePK" => "name"], "displayName" => "title", "values" => [1, 2, 3], "forExplode" => "hi,hello", "types" => [ ["name" => "php", "title" => "PHP: Hypertext Preprocessor", ["name" => "pg", "title" => "PostgreSQL"] ] ]
- '{{fn.implode(', ', values)}}' -> '1, 2, 3, 4'
- '{{values[0]}}' -> '1'
- '{{fn.implode(', ', fn.array_column(statuses, 'title'))}}' -> 'PHP: Hypertext Preprocessor, PostgreSQL'
- '{{fn.explode(',', forExplode)[1]}}' -> 'hello'
- '{{statuses[0]['title']}}' -> 'PHP: Hypertext Preprocessor'
- '{{statuses[1][displayName]}}' -> 'PostgreSQL'
- '{{statuses[1][map.statusesPK]}}' -> 'pg'
函数
所有可用函数。更多信息请访问 php.net
-
数字
- round, rand, pow, floor, abs
-
日期时间
- time, date, gmdate, strtotime, strtodate*
-
数组
- explode, implode, array_column, array_push, array_merge
-
字符串
- trim, strlen, substr, strpos, strstr, sprintf, ucfirst, ucwords, strtoupper, strtolower, strip_tags, str_replace, urlencode, rawurlencode
算术运算符
算术运算符与数值一起使用以执行常见的算术运算,例如加法、减法、乘法和除法。
作用域数据
["done" => 9, "total" => 100, "float" => "5.4" ]
- '{{1 + 2}}' -> '3'
- '{{1 + 2 * 3}}' -> '7'
- '{{(1 + 2) * 3}}' -> '9'
- '{{(1.2 + 2,4) * float}}' -> '19.44'
- '{{fn.round((done / total)*100, 2)}} %' -> '9 %'
条件
语法允许使用逻辑和比较运算符进行行内条件。
作用域数据
["success" => true, "ok" => "ok", "notOk" => "not ok" ]
- '{{(success) ? ok : notOk)}}' -> 'ok'
- '{{(! success) ? ok : notOk)}}' -> 'not ok'
- '{{1 && (0 || success) ? ok : notOk)}}' -> 'ok'
- '{{1 > 0 && 1 < 1 ? ok : notOk)}}' -> 'not ok'
高级
您可以使用这种语法来访问对象值。这仅在模板中使用一个替换语法时有效。值将存储在onlyOneParamValue属性中。
<?php $output = \Yakub\SimpleTemplating\Replace::compile( '{{types[1]}}', [ "types" => [ ["name" => "php", "title" => "PHP: Hypertext Preprocessor", ["name" => "pg", "title" => "PostgreSQL"] ] ] ); echo $output; // Output: "" array isn't transformed to string echo json_encode($output->onlyOneParamValue); // Output: "{"name":"pg","title":"PostgreSQL"}"