Text 类包含用于创建和操作字符串的便捷方法,通常以静态方式访问。示例:Text::uuid()
。
如果您需要 Cake\View\Helper\TextHelper
功能,但不在 View
中,请使用 Text
类。
namespace App\Controller;
use Cake\Utility\Text;
class UsersController extends AppController
{
public function initialize(): void
{
parent::initialize();
$this->loadComponent('Auth')
};
public function afterLogin()
{
$message = $this->Users->find('new_message')->first();
if (!empty($message)) {
// Notify user of new message
$this->Flash->success(__(
'You have a new message: {0}',
Text::truncate($message['Message']['body'], 255, ['html' => true])
));
}
}
}
默认情况下,transliterate 将提供的字符串中的所有字符转换为等效的 ASCII 字符。该方法需要 UTF-8 编码。字符转换可以使用您使用 $transliteratorId
参数传递的转换标识符进行控制,或者使用 Text::setTransliteratorId()
更改默认标识符字符串。ICU 转换标识符基本上是 <source script>:<target script>
形式的,并且您可以使用 ;
指定多个转换对。您可以在这里找到有关转换标识符的更多信息 这里
// apple puree
Text::transliterate('apple purée');
// Ubermensch (only latin characters are transliterated)
Text::transliterate('Übérmensch', 'Latin-ASCII;');
Slug 将所有字符转换为 ASCII 版本,并将不匹配的字符和空格转换为连字符。slug 方法需要 UTF-8 编码。
您可以提供一个控制 slug 的选项数组。 $options
也可以是一个字符串,在这种情况下它将用作替换字符串。支持的选项是
replacement
替换字符串,默认为 ‘-‘。
transliteratorId
一个有效的转换标识符字符串。如果默认值 null
Text::$_defaultTransliteratorId
将被使用。如果为 false
,则不会进行任何转换,只会删除非单词。
preserve
要保留的特定非单词字符。默认为 null
。例如,此选项可以设置为 ‘.’ 以生成干净的文件名
// apple-puree
Text::slug('apple purée');
// apple_puree
Text::slug('apple purée', '_');
// foo-bar.tar.gz
Text::slug('foo bar.tar.gz', ['preserve' => '.']);
UUID 方法用于根据 RFC 4122 生成唯一标识符。UUID 是一个 128 位字符串,格式为 485fc381-e790-47a3-9794-1337c0a8fe68
。
Text::uuid(); // 485fc381-e790-47a3-9794-1337c0a8fe68
使用 $separator
对字符串进行标记,忽略 $leftBound
和 $rightBound
之间出现的 $separator
的任何实例。
此方法在拆分格式规则的(例如标签列表)数据时非常有用。
$data = "cakephp 'great framework' php";
$result = Text::tokenize($data, ' ', "'", "'");
// Result contains
['cakephp', "'great framework'", 'php'];
此方法将人类可读的字节大小的数字从格式化数字转换为以字节为单位的整数数字。
$int = Text::parseFileSize('2GB');
insert 方法用于创建字符串模板并允许键值替换。
Text::insert(
'My name is :name and I am :age years old.',
['name' => 'Bob', 'age' => '65']
);
// Returns: "My name is Bob and I am 65 years old."
使用给定的 $options
清理 Text::insert
格式的字符串,具体取决于 $options
中的 ‘clean’ 键。使用的默认方法是 text,但 html 也可用。此函数的目标是替换所有空格和周围占位符的非必要标记,这些占位符没有被 Text::insert
替换。
您可以在选项数组中使用以下选项
$options = [
'clean' => [
'method' => 'text', // or html
],
'before' => '',
'after' => ''
];
将文本块换行到设定的宽度,并缩进块。可以智能地换行文本,以便单词不会被切断在行上。
$text = 'This is the song that never ends.';
$result = Text::wrap($text, 22);
// Returns
This is the song that
never ends.
您可以提供一个控制换行方式的选项数组。支持的选项是
width
要换行的宽度。默认为 72。
wordWrap
是否要换行整个单词。默认为 true
。
indent
用于缩进行的字符。默认为 ‘'。
indentAt
开始缩进文本的行号。默认为 0。
如果您需要确保即使有内部缩进,生成的块的总宽度也不会超过一定长度,则需要使用 wrapBlock()
而不是 wrap()
。这对于生成控制台的文本特别有用。它接受与 wrap()
相同的选项
$text = 'This is the song that never ends. This is the song that never ends.';
$result = Text::wrapBlock($text, [
'width' => 22,
'indent' => ' → ',
'indentAt' => 1
]);
// Returns
This is the song that
→ never ends. This
→ is the song that
→ never ends.
突出显示 $needle
在 $haystack
中,使用指定的 $options['format']
字符串或默认字符串。
选项
format
字符串 - 包含将被突出显示的短语的 HTML 片段
html
布尔值 - 如果为 true
,将忽略任何 HTML 标签,确保仅突出显示正确的文本
示例
// Called as TextHelper
echo $this->Text->highlight(
$lastSentence,
'using',
['format' => '<span class="highlight">\1</span>']
);
// Called as Text
use Cake\Utility\Text;
echo Text::highlight(
$lastSentence,
'using',
['format' => '<span class="highlight">\1</span>']
);
输出
从提供的 $text
中移除任何 HTML 链接。
如果 $text
长于 $length
,则此方法将在 $length
处截断它,并添加一个后缀,该后缀包含 'ellipsis'
(如果已定义)。如果 'exact'
被传递为 false
,则截断将在超过 $length
的位置后的第一个空格处发生。如果 'html'
被传递为 true
,则 HTML 标签将被尊重,不会被截断。
$options
用于传递所有额外的参数,默认情况下具有以下可能的键,所有这些键都是可选的
[
'ellipsis' => '...',
'exact' => true,
'html' => false
]
示例
// Called as TextHelper
echo $this->Text->truncate(
'The killer crept forward and tripped on the rug.',
22,
[
'ellipsis' => '...',
'exact' => false
]
);
// Called as Text
use Cake\Utility\Text;
echo Text::truncate(
'The killer crept forward and tripped on the rug.',
22,
[
'ellipsis' => '...',
'exact' => false
]
);
输出
The killer crept...
如果 $text
长于 $length
,则此方法会移除长度为差值的初始子字符串,并添加一个前缀,该前缀包含 'ellipsis'
(如果已定义)。如果 'exact'
被传递为 false
,则截断将在否则会发生截断的位置之前的第一个空格处发生。
$options
用于传递所有额外的参数,默认情况下具有以下可能的键,所有这些键都是可选的
[
'ellipsis' => '...',
'exact' => true
]
示例
$sampleText = 'I packed my bag and in it I put a PSP, a PS3, a TV, ' .
'a C# program that can divide by zero, death metal t-shirts'
// Called as TextHelper
echo $this->Text->tail(
$sampleText,
70,
[
'ellipsis' => '...',
'exact' => false
]
);
// Called as Text
use Cake\Utility\Text;
echo Text::tail(
$sampleText,
70,
[
'ellipsis' => '...',
'exact' => false
]
);
输出
...a TV, a C# program that can divide by zero, death metal t-shirts
从 $haystack
中提取围绕 $needle
的摘录,每侧的字符数由 $radius
决定,并在前缀/后缀中使用 $ellipsis
。此方法对于搜索结果特别有用。查询字符串或关键字可以在结果文档中显示。
// Called as TextHelper
echo $this->Text->excerpt($lastParagraph, 'method', 50, '...');
// Called as Text
use Cake\Utility\Text;
echo Text::excerpt($lastParagraph, 'method', 50, '...');
输出
... by $radius, and prefix/suffix with $ellipsis. This method is especially
handy for search results. The query...
创建一个逗号分隔的列表,其中最后两个项目用“and”连接。
$colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
// Called as TextHelper
echo $this->Text->toList($colors);
// Called as Text
use Cake\Utility\Text;
echo Text::toList($colors);
输出
red, orange, yellow, green, blue, indigo and violet