类 ShadowTableStrategy
此类提供了一种通过在单独的影子表中保存翻译来翻译动态数据的方法,其中每一行对应于主表的一行。
属性摘要
-
$_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
负责翻译的 Table 实例
方法摘要
-
__construct() public
构造函数
-
_configDelete() protected
删除单个配置键。
-
_configRead() protected
读取配置键。
-
_configWrite() protected
写入配置键。
-
addFieldsToQuery() protected
将翻译字段添加到查询。
-
afterSave() public
在实体保存后取消设置临时
_i18n
属性 -
beforeFind() public
回调方法,监听绑定表中的
beforeFind
事件。它通过急切加载翻译的字段并将格式化程序添加到查询中来修改传入的查询,以将值复制到主表记录中。 -
beforeSave() public
在实体保存之前修改它,以便将翻译的字段也持久化到数据库中。
-
buildMarshalMap() public
构建一组应该包含在编组过程中的属性。
-
bundleTranslatedFields() protected
辅助方法,用于从传入实体的
_translations
属性中找到的数据生成多个翻译字段实体。结果将被放入其_i18n
属性中。 -
configShallow() public
将提供的配置与现有配置合并。与
config()
对嵌套键进行递归合并不同,此方法进行简单的合并。 -
fetchTable() public
获取表实例的便捷方法。
-
getConfig() public
返回配置。
-
getConfigOrFail() public
返回此特定键的配置。
-
getLocale() public
返回当前语言环境。
-
getTableLocator() public
获取表定位器。
-
getTranslationTable() public
返回翻译表实例。
-
groupTranslations() public
修改表查找的结果,以便将完整的翻译记录合并到每个实体的
_translations
键下。 -
iterateClause() protected
迭代子句以对字段进行别名化。
-
mainFields() protected
延迟定义并返回主表字段。
-
rowMapper() protected
修改表查找的结果,以便将翻译的字段合并到给定语言环境的每个实体中。
-
setConfig() public
设置配置。
-
setLocale() public
设置要使用的语言环境。
-
setTableLocator() public
设置表定位器。
-
setupAssociations() protected
为所有记录创建一个 hasMany 关联。
-
setupHasOneAssociation() protected
为具有所需语言环境的记录创建一个 hasOne 关联。
-
translatedFields() protected
延迟定义并返回翻译表字段。
-
translationField() public
返回翻译字段的完全别名字段名称。
-
traverseClause() protected
遍历子句以对字段进行别名化。
-
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
如果尝试覆盖现有配置
addFieldsToQuery() ¶ protected
addFieldsToQuery(Cake\ORM\Query\SelectQuery $query, array<string, mixed> $config): bool
将翻译字段添加到查询。
如果查询使用 autofields(直接或隐式),则首先将主表的字段添加到查询中。
仅为主表中的字段添加翻译,但始终添加语言环境字段。
参数
-
Cake\ORM\Query\SelectQuery
$query 要检查的查询。
-
array<string, mixed>
$config 用于添加字段的配置。
返回
bool
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 触发的 beforeFind 事件。
-
Cake\ORM\Query\SelectQuery
$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 传递给 save 方法的选项。
返回
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
返回
数组
bundleTranslatedFields() ¶ protected
bundleTranslatedFields(Cake\Datasource\EntityInterface $entity): void
辅助方法,用于从传入实体的 _translations
属性中找到的数据生成多个翻译字段实体。结果将被放入其 _i18n
属性中。
参数
-
Cake\Datasource\EntityInterface
$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 optional 要设置的值。
返回
$this
fetchTable() ¶ public
fetchTable(string|null $alias = null, array<string, mixed> $options = []): Cake\ORM\Table
获取表实例的便捷方法。
参数
-
string|null
$alias optional 您要获取的别名。应使用驼峰式大小写格式。如果为
null
,则使用$defaultTable
属性的值。-
array<string, mixed>
$options optional 您要用于构建表的选项。如果表已加载,则注册表选项将被忽略。
返回
Cake\ORM\Table
抛出
Cake\Core\Exception\CakeException
如果
$alias
参数和 $defaultTable
属性均为 null
。另请参阅
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 optional 要获取的键,或整个配置的
null
。-
mixed
$default optional 键不存在时的返回值。
返回
mixed
getConfigOrFail() ¶ public
getConfigOrFail(string $key): mixed
返回此特定键的配置。
此键的配置值必须存在,永远不能为 null
。
参数
-
string
$key 要获取的键。
返回
mixed
抛出
InvalidArgumentException
getLocale() ¶ public
getLocale(): string
返回当前语言环境。
如果尚未通过 setLocale()
显式设置区域设置,则此方法将返回当前配置的全局区域设置。
返回
字符串
另请参阅
\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
iterateClause() ¶ protected
iterateClause(Cake\ORM\Query\SelectQuery $query, string $name = '', array<string, mixed> $config = []): bool
迭代子句以对字段进行别名化。
此处的目标是通过在字段前添加适当的表别名来透明地防止不明确的字段错误。此方法目前仅期望接收 order 子句。
参数
-
Cake\ORM\Query\SelectQuery
$query 要检查的查询。
-
string
$name optional 子句名称。
-
array<string, mixed>
$config optional 用于添加字段的配置。
返回
bool
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 optional 要设置的值。
-
bool
$merge optional 是否递归合并或覆盖现有配置,默认为
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
为所有记录创建一个 hasMany 关联。
不要在此处创建 hasOne 关联,因为联接条件在 before find 中被修改 - 因此在该处创建/修改它。
返回
void
setupHasOneAssociation() ¶ protected
setupHasOneAssociation(string $locale, ArrayObject<string, mixed> $options): void
为具有所需语言环境的记录创建一个 hasOne 关联。
参数
-
string
$locale 区域设置
-
ArrayObject<string, mixed>
$options 查找选项
返回
void
translationField() ¶ public
translationField(string $field): string
返回翻译字段的完全别名字段名称。
如果请求的字段被配置为翻译字段,则返回具有对应关联别名的字段。所有其他字段都返回表别名后的字段名称。
参数
-
string
$field 要加别名的字段名称。
返回
字符串
traverseClause() ¶ protected
traverseClause(Cake\ORM\Query\SelectQuery $query, string $name = '', array<string, mixed> $config = []): bool
遍历子句以对字段进行别名化。
此处的目标是通过在字段前添加适当的表别名来透明地防止不明确的字段错误。此方法目前仅期望接收 where 子句。
参数
-
Cake\ORM\Query\SelectQuery
$query 要检查的查询。
-
string
$name optional 子句名称。
-
array<string, mixed>
$config optional 用于添加字段的配置。
返回
bool
unsetEmptyFields() ¶ protected
unsetEmptyFields(Cake\Datasource\EntityInterface $entity): void
取消设置空的翻译以避免持久化。
仅当 $this->_config['allowEmptyTranslations']
为 false
时才应调用。
参数
-
Cake\Datasource\EntityInterface
$entity 要检查内部空翻译字段的实体。
返回
void