Inflector 类接收一个字符串并对其进行操作以处理单词变体,例如复数化或驼峰化,通常以静态方式访问。例如:Inflector::pluralize('example')
返回“examples”。
您可以在 inflector.cakephp.org 或 sandbox.dereuromark.de 上在线试用这些变体。
Inflector 内置方法及其在提供多词参数时的输出结果的快速摘要
方法 |
参数 |
输出 |
---|---|---|
|
BigApple |
BigApples |
big_apple |
big_apples |
|
|
BigApples |
BigApple |
big_apples |
big_apple |
|
|
big_apples |
BigApples |
big apple |
BigApple |
|
|
BigApples |
big_apples |
Big Apples |
big apples |
|
|
big_apples |
Big Apples |
bigApple |
BigApple |
|
|
big_apples |
BigApple |
big apple |
BigApple |
|
|
BigApples |
big-apples |
big apple |
big apple |
|
|
BigApple |
big_apples |
Big Apple |
big apples |
|
|
big_apple |
bigApple |
big apples |
bigApples |
pluralize
和 singularize()
都适用于大多数英语名词。如果您需要支持其他语言,可以使用 Inflection 配置 自定义使用的规则
// Apples
echo Inflector::pluralize('Apple');
注意
pluralize()
不应用于已经处于复数形式的名词。
// Person
echo Inflector::singularize('People');
注意
singularize()
不应用于已经处于单数形式的名词。
这些方法在创建类名或属性名时很有用
// ApplePie
Inflector::camelize('Apple_pie')
// apple_pie
Inflector::underscore('ApplePie');
需要注意的是,underscore 将只转换驼峰格式的单词。包含空格的单词将被小写,但不会包含下划线。
此方法在将下划线形式转换为“标题大小写”形式以供人类可读值时很有用
// Apple Pie
Inflector::humanize('apple_pie');
在生成代码或使用 CakePHP 的约定时,您可能需要对表名或类名进行变体处理
// UserProfileSetting
Inflector::classify('user_profile_settings');
// user-profile-setting
Inflector::dasherize('UserProfileSetting');
// user_profile_settings
Inflector::tableize('UserProfileSetting');
变量名称在进行涉及生成代码或根据约定执行工作的元编程任务时通常很有用
// applePie
Inflector::variable('apple_pie');
CakePHP 的命名约定非常好 - 您可以将数据库表命名为 big_boxes
,模型命名为 BigBoxes
,控制器命名为 BigBoxesController
,所有这些都会自动协同工作。CakePHP 知道如何将这些东西联系在一起是通过 *变体处理* 单词之间的单数和复数形式。
在某些情况下(尤其是对于非英语使用者),您可能会遇到 CakePHP 的 Inflector(负责复数化、单数化、驼峰化和下划线的类)无法按您预期的方式工作的情况。如果 CakePHP 无法识别您的 Foci 或 Fish,您可以告诉 CakePHP 关于您的特殊情况。
为 Inflector 定义新的变体处理和音译规则。通常,此方法在您的 config/bootstrap.php 中使用
Inflector::rules('singular', ['/^(bil)er$/i' => '\1', '/^(inflec|contribu)tors$/i' => '\1ta']);
Inflector::rules('uninflected', ['singulars']);
Inflector::rules('irregular', ['phylum' => 'phyla']); // The key is singular form, value is plural form
提供的规则将与 Cake/Utility/Inflector
中定义的各自变体处理集中合并,新增规则优先于核心规则。您可以使用 Inflector::reset()
来清除规则并恢复原始 Inflector 状态。