yakub/simple-templating

v1.3 2020-06-25 10:17 UTC

This package is auto-updated.

Last update: 2024-09-21 00:38:53 UTC


README

PHP 简单模板。您可以用字符串替换并使用基本的 PHP 函数。

构建状态

master: Build Status Coverage Status

dev: Build Status Coverage Status

安装

推荐通过 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"}"