jesseschutt/token-replacer

定义标记并在字符串中替换其出现。

v2.0.0 2024-08-17 19:10 UTC

This package is auto-updated.

Last update: 2024-09-17 19:24:05 UTC


README

Build Status Code Coverage Dependencies

信用

此包是 原始包 的分支,由HollyIT的Jamie Holly创建。

安装

composer require jesseschutt/token-replacer

配置

您可以通过运行以下命令发布配置文件

php artisan vendor:publish --provider="JesseSchutt\TokenReplacer\TokenReplacerServiceProvider"

这将在您的 config 目录中创建一个 token-replacer.php 文件。在这里,您可以设置默认标记的开始和结束字符、默认标记分隔符和默认转换器。

说明

此包允许您在字符串中定义可替换的标记。与简单的 str_replace 不同,Token Replacer 允许您为每个标记添加选项。让我们从一个例子开始。

use \JesseSchutt\TokenReplacer\Facades\TokenReplacer;
use \JesseSchutt\TokenReplacer\Transformers\DateTransformer;

$input="Today is {{ date:m }}/{{ date:d }}/{{ date:y }}.";  
  
echo TokenReplacer::from($input)->with('date', DateTransformer::class)  
      
// Results in: Today is 11/11/21.      

标记有一定的结构,让我们看看 {{ date:m }}。这是一个默认标记格式,但此格式可以全局和实例化配置。

转换器

标记的替换通过转换器处理。转换器可以是闭包或简单的类。

可以将转换器添加到 TokenReplacer 的每个实例或通过在配置文件中将它们添加到 default_transformers 数组中全局添加。

注意:全局转换器实例化时不会接收任何数据。DateTransformerAuthTransformer 是仅有的两个适用于全局使用的内置转换器。

每个实例的标记通过 $instance->with({token name}, {class name, transformer instance or closure}); 添加。对于基于闭包的转换器,签名是

function(string $options)

包含的转换器

所有这些转换器都位于 \JesseSchutt\TokenReplacer\Transformers 命名空间下。

还有特殊的 Laravel 转换器位于 \JesseSchutt\TokenReplacer\Transformers\Laravel

后处理

除了提取项目之外,没有转换器执行任何其他处理。如果您想执行进一步的处理,例如转义替换项,可以定义一个 onReplace 回调

$replacer->onReplace(function(string $result, string $token, string $options){  
  return strtoupper($result);  
});

此回调将为每个找到的标记出现执行,因此您可以通过检查 $token 属性来进一步筛选要操作的标记。

无效或缺失的标记

默认情况下,无效和缺失的标记将保留在字符串中。要防止这种情况,可以在 TokenReplacer 上设置 removeEmpty()