EavStrategy 类
此类提供了一种通过将翻译保存在链接到另一个表的原始记录的单独表中来翻译动态数据的方法。翻译字段可以配置为在获取时覆盖主表中的字段,或者将它们放在同一实体的另一个属性中。
如果您希望覆盖字段,则需要在此行为中调用locale
方法来设置要从翻译表中获取的语言。
如果您想为每个获取的记录带来所有语言或某些语言,您可以使用TranslateBehavior
暴露给表的自定义translations
查找器。
属性摘要
-
$_config protected
array<string, mixed>
运行时配置
-
$_configInitialized protected
bool
配置属性是否已使用默认值配置
-
$_defaultConfig protected
array<string, mixed>
默认配置
-
$_tableLocator protected
Cake\ORM\Locator\LocatorInterface|null
表定位器实例
-
$defaultTable protected
string|null
此对象的默认表别名。
-
$locale protected
string|null
将用于从翻译表覆盖绑定表中的字段的语言环境名称
-
$table protected
Cake\ORM\Table
表实例
-
$translationTable protected
Cake\ORM\Table
负责翻译的表实例
方法摘要
-
__construct() public
构造函数
-
_configDelete() protected
删除单个配置键。
-
_configRead() protected
读取配置键。
-
_configWrite() protected
写入配置键。
-
afterSave() public
在实体保存后取消设置临时
_i18n
属性 -
beforeFind() public
回调方法,监听绑定表中的
beforeFind
事件。它通过预加载翻译字段并添加格式化程序来复制值到主表记录来修改传递的查询。 -
beforeSave() public
在保存实体之前修改实体,以便翻译字段也持久保存到数据库中。
-
buildMarshalMap() public
构建一组应包含在编组过程中的属性。
-
bundleTranslatedFields() protected
辅助方法,用于从传递的实体中的
_translations
属性中找到的数据生成多个翻译字段实体。结果将放入其_i18n
属性中。 -
configShallow() public
将提供的配置与现有配置合并。与
config()
对嵌套键进行递归合并不同,此方法执行简单的合并。 -
fetchTable() public
获取表实例的便捷方法。
-
findExistingTranslations() protected
返回为翻译表传递的每个条件数组找到的 ID。每个记录都按与条件数组相对应的位置索引。
-
getConfig() public
返回配置。
-
getConfigOrFail() public
返回此特定键的配置。
-
getLocale() public
返回当前语言环境。
-
getTableLocator() public
获取表定位器。
-
getTranslationTable() public
返回翻译表实例。
-
groupTranslations() public
修改表查找的结果,以便将完整的翻译记录合并到
_translations
键下的每个实体中。 -
rowMapper() protected
修改表查找的结果,以便将翻译字段合并到给定语言环境的每个实体中。
-
setConfig() public
设置配置。
-
setLocale() public
设置要使用的语言环境。
-
setTableLocator() public
设置表定位器。
-
setupAssociations() protected
在绑定表和传递给此方法的每个字段之间创建关联。
-
translationField() public
返回翻译字段的完全限定字段名。
-
unsetEmptyFields() protected
取消设置空翻译以避免持久化。
方法详细信息
__construct() ¶ public
__construct(Cake\ORM\Table $table, array<string, mixed> $config = [])
构造函数
参数
-
Cake\ORM\Table
$table 此策略附加到的表。
-
array<string, mixed>
$config optional 此策略的配置。
_configDelete() ¶ protected
_configDelete(string $key): void
删除单个配置键。
参数
-
string
$key 要删除的键。
返回值
void
抛出
Cake\Core\Exception\CakeException
如果尝试覆盖现有配置
_configRead() ¶ protected
_configRead(string|null $key): mixed
读取配置键。
参数
-
string|null
$key 要读取的键。
返回值
mixed
_configWrite() ¶ protected
_configWrite(array<string, mixed>|string $key, mixed $value, string|bool $merge = false): void
写入配置键。
参数
-
array<string, mixed>|string
$key 要写入的键。
-
mixed
$value 要写入的值。
-
string|bool
$merge optional True 表示递归合并,'shallow' 表示简单合并,false 表示覆盖,默认为 false。
返回值
void
抛出
Cake\Core\Exception\CakeException
如果尝试覆盖现有配置
afterSave() ¶ public
afterSave(Cake\Event\EventInterfaceCake\ORM\Table> $event, Cake\Datasource\EntityInterface $entity): void
在实体保存后取消设置临时_i18n
属性
参数
-
Cake\Event\EventInterfaceCake\ORM\Table>
$event 触发的 beforeSave 事件
-
Cake\Datasource\EntityInterface
$entity 将要保存的实体
返回值
void
beforeFind() ¶ public
beforeFind(Cake\Event\EventInterfaceCake\ORM\Table> $event, Cake\ORM\Query\SelectQuery $query, ArrayObject<string, mixed> $options): void
回调方法,监听绑定表中的beforeFind
事件。它通过预加载翻译字段并添加格式化程序来复制值到主表记录来修改传递的查询。
参数
-
Cake\Event\EventInterfaceCake\ORM\Table>
$event 触发之前查找事件。
-
Cake\ORM\Query\SelectQuery
$query Query
-
ArrayObject<string, mixed>
$options 查询的选项
返回值
void
beforeSave() ¶ public
beforeSave(Cake\Event\EventInterfaceCake\ORM\Table> $event, Cake\Datasource\EntityInterface $entity, ArrayObject<string, mixed> $options): void
在保存实体之前修改实体,以便翻译字段也持久保存到数据库中。
参数
-
Cake\Event\EventInterfaceCake\ORM\Table>
$event 触发的 beforeSave 事件
-
Cake\Datasource\EntityInterface
$entity 将要保存的实体
-
ArrayObject<string, mixed>
$options 传递给保存方法的选项
返回值
void
buildMarshalMap() ¶ public
buildMarshalMap(Cake\ORM\Marshaller $marshaller, array $map, array<string, mixed> $options): array
构建一组应包含在编组过程中的属性。
添加 _translations
转换处理程序。您可以在传递给 Table::newEntity()
或 Table::patchEntity()
的选项中设置 'translations' => false
来禁用转换的转换。
参数
-
Cake\ORM\Marshaller
$marshaller 行为附加到的表的转换器。
-
array
$map 正在构建的属性映射。
-
array<string, mixed>
$options 转换调用中使用的选项数组。
返回值
array
bundleTranslatedFields() ¶ protected
bundleTranslatedFields(Cake\Datasource\EntityInterface $entity): void
辅助方法,用于从传递的实体中的_translations
属性中找到的数据生成多个翻译字段实体。结果将放入其_i18n
属性中。
参数
-
Cake\Datasource\EntityInterface
$entity Entity
返回值
void
configShallow() ¶ public
configShallow(array<string, mixed>|string $key, mixed|null $value = null): $this
将提供的配置与现有配置合并。与config()
对嵌套键进行递归合并不同,此方法执行简单的合并。
设置特定值
$this->configShallow('key', $value);
设置嵌套值
$this->configShallow('some.nested.key', $value);
同时更新多个配置设置
$this->configShallow(['one' => 'value', 'another' => 'value']);
参数
-
array<string, mixed>|string
$key 要设置的键,或完整的配置数组。
-
mixed|null
$value 可选 要设置的值。
返回值
$this
fetchTable() ¶ public
fetchTable(string|null $alias = null, array<string, mixed> $options = []): Cake\ORM\Table
获取表实例的便捷方法。
参数
-
string|null
$alias 可选 要获取的别名。应为驼峰式命名。如果为
null
,则使用$defaultTable
属性的值。-
array<string, mixed>
$options 可选 要使用该表构建的选项。如果已经加载了表,则会忽略注册表选项。
返回值
Cake\ORM\Table
抛出
Cake\Core\Exception\CakeException
如果 `$alias` 参数和 `$defaultTable` 属性均为 `null`。
另请参见
findExistingTranslations() ¶ protected
findExistingTranslations(array $ruleSet): array
返回为翻译表传递的每个条件数组找到的 ID。每个记录都按与条件数组相对应的位置索引。
参数
-
array
$ruleSet 要用于查找每个的条件数组
返回值
array
getConfig() ¶ public
getConfig(string|null $key = null, mixed $default = null): mixed
返回配置。
用法
读取整个配置
$this->getConfig();
读取特定值
$this->getConfig('key');
读取嵌套值
$this->getConfig('some.nested.key');
使用默认值读取
$this->getConfig('some-key', 'default-value');
参数
-
string|null
$key 可选 要获取的键,或整个配置的 null。
-
mixed
$default 可选 键不存在时的返回值。
返回值
mixed
getConfigOrFail() ¶ public
getConfigOrFail(string $key): mixed
返回此特定键的配置。
此键的配置值必须存在,不能为 null。
参数
-
string
$key 要获取的键。
返回值
mixed
抛出
InvalidArgumentException
getLocale() ¶ public
getLocale(): string
返回当前语言环境。
如果未通过 setLocale()
显式设置任何区域设置,则此方法将返回当前配置的全局区域设置。
返回值
string
另请参见
\Cake\ORM\Behavior\TranslateBehavior::setLocale()
getTableLocator() ¶ public
getTableLocator(): Cake\ORM\Locator\LocatorInterface
获取表定位器。
返回值
Cake\ORM\Locator\LocatorInterface
groupTranslations() ¶ public
groupTranslations(Cake\Collection\CollectionInterface $results): Cake\Collection\CollectionInterface
修改表查找的结果,以便将完整的翻译记录合并到_translations
键下的每个实体中。
参数
-
Cake\Collection\CollectionInterface
$results 要修改的结果。
返回值
Cake\Collection\CollectionInterface
rowMapper() ¶ protected
rowMapper(Cake\Collection\CollectionInterface $results, string $locale): Cake\Collection\CollectionInterface
修改表查找的结果,以便将翻译字段合并到给定语言环境的每个实体中。
参数
-
Cake\Collection\CollectionInterface
$results 要映射的结果。
-
string
$locale 区域设置字符串
返回值
Cake\Collection\CollectionInterface
setConfig() ¶ public
setConfig(array<string, mixed>|string $key, mixed|null $value = null, bool $merge = true): $this
设置配置。
用法
设置特定值
$this->setConfig('key', $value);
设置嵌套值
$this->setConfig('some.nested.key', $value);
同时更新多个配置设置
$this->setConfig(['one' => 'value', 'another' => 'value']);
参数
-
array<string, mixed>|string
$key 要设置的键,或完整的配置数组。
-
mixed|null
$value 可选 要设置的值。
-
bool
$merge 可选 是否递归合并或覆盖现有配置,默认为 true。
返回值
$this
抛出
Cake\Core\Exception\CakeException
尝试设置无效的键时。
setLocale() ¶ public
setLocale(string|null $locale): $this
设置要使用的语言环境。
在获取记录时,将使用通过此方法设置的区域设置的内容,同样,在保存数据时,将以该区域设置保存数据。
请注意,如果实体具有 _locale
属性设置,则该区域设置将胜过通过此方法设置的区域设置(以及胜过为此目的全局配置的区域设置)!
参数
-
string|null
$locale 用于获取和保存记录的区域设置。传递
null
以取消设置当前区域设置,并使行为回退到使用全局配置的区域设置。
返回值
$this
setTableLocator() ¶ public
setTableLocator(Cake\ORM\Locator\LocatorInterface $tableLocator): $this
设置表定位器。
参数
-
Cake\ORM\Locator\LocatorInterface
$tableLocator LocatorInterface 实例。
返回值
$this
setupAssociations() ¶ protected
setupAssociations(): void
在绑定表和传递给此方法的每个字段之间创建关联。
此外,它还创建了一个 i18n
HasMany 关联,该关联将用于获取绑定到该表的每个记录的所有转换。
返回值
void
translationField() ¶ public
translationField(string $field): string
返回翻译字段的完全限定字段名。
如果请求的字段被配置为转换字段,则返回带有相应关联别名的 content
字段。表别名字段名称将为所有其他字段返回。
参数
-
string
$field 要为其设置别名的字段名称。
返回值
string
unsetEmptyFields() ¶ protected
unsetEmptyFields(Cake\Datasource\EntityInterface $entity): void
取消设置空翻译以避免持久化。
如果 $this->_config['allowEmptyTranslations']
为 false,则应仅调用它。
参数
-
Cake\Datasource\EntityInterface
$entity 要检查其内部空转换字段的实体。
返回值
void