Fr3nch13/CakePHP Utilities

TranslateBehavior extends Behavior
in package
implements PropertyMarshalInterface

This behavior provides a way to translate dynamic data by keeping translations in a separate table linked to the original record from another one. Translated fields can be configured to override those in the main table when fetched or put aside into another property for the same entity.

If you wish to override fields, you need to call the locale method in this behavior for setting the language you want to fetch from the translations table.

If you want to bring all or certain languages for each of the fetched records, you can use the custom translations finders that is exposed to the table.

Table of Contents

Interfaces

PropertyMarshalInterface
Behaviors implementing this interface can participate in entity marshalling.

Properties

$_config  : array<string, mixed>
Runtime config
$_configInitialized  : bool
Whether the config property has already been configured with defaults
$_defaultConfig  : array<string, mixed>
Default config
$_reflectionCache  : array<string, array<string|int, mixed>>
Reflection method cache for behaviors.
$_table  : Table
Table instance.
$defaultStrategyClass  : string
Default strategy class name.
$strategy  : TranslateStrategyInterface|null
Translation strategy instance.

Methods

__call()  : mixed
Proxy method calls to strategy class instance.
__construct()  : mixed
Constructor
buildMarshalMap()  : array<string|int, mixed>
Build a set of properties that should be included in the marshalling process.
configShallow()  : $this
Merge provided config with existing config. Unlike `config()` which does a recursive merge for nested keys, this method does a simple merge.
findTranslations()  : Query
Custom finder method used to retrieve all translations for the found records.
getConfig()  : mixed
Returns the config.
getConfigOrFail()  : mixed
Returns the config for this specific key.
getDefaultStrategyClass()  : string
Get default strategy class name.
getLocale()  : string
Returns the current locale.
getStrategy()  : TranslateStrategyInterface
Get strategy class instance.
getTable()  : Table
Get the table instance this behavior is bound to.
implementedEvents()  : array<string, mixed>
Gets the Model callbacks this behavior is interested in.
implementedFinders()  : array<string|int, mixed>
implementedFinders
implementedMethods()  : array<string|int, mixed>
implementedMethods
initialize()  : void
Initialize hook
setConfig()  : $this
Sets the config.
setDefaultStrategyClass()  : void
Set default strategy class name.
setLocale()  : $this
Sets the locale that should be used for all future find and save operations on the table where this behavior is attached to.
setStrategy()  : $this
Set strategy class instance.
table()  : Table
Get the table instance this behavior is bound to.
translationField()  : string
Returns a fully aliased field name for translated fields.
verifyConfig()  : void
verifyConfig
_configDelete()  : void
Deletes a single config key.
_configRead()  : mixed
Reads a config key.
_configWrite()  : void
Writes a config key.
_reflectionCache()  : array<string|int, mixed>
Gets the methods implemented by this behavior
_resolveMethodAliases()  : array<string|int, mixed>
Removes aliased methods that would otherwise be duplicated by userland configuration.
createStrategy()  : TranslateStrategyInterface
Create strategy instance.
referenceName()  : string
Determine the reference name to use for a given table

Properties

$_configInitialized

Whether the config property has already been configured with defaults

protected bool $_configInitialized = false

$_defaultConfig

Default config

protected array<string, mixed> $_defaultConfig = ['implementedFinders' => ['translations' => 'findTranslations'], 'implementedMethods' => ['setLocale' => 'setLocale', 'getLocale' => 'getLocale', 'translationField' => 'translationField'], 'fields' => [], 'defaultLocale' => null, 'referenceName' => '', 'allowEmptyTranslations' => true, 'onlyTranslated' => false, 'strategy' => 'subquery', 'tableLocator' => null, 'validator' => false]

These are merged with user-provided configuration when the behavior is used.

$_reflectionCache

Reflection method cache for behaviors.

protected static array<string, array<string|int, mixed>> $_reflectionCache = []

Stores the reflected method + finder methods per class. This prevents reflecting the same class multiple times in a single process.

$defaultStrategyClass

Default strategy class name.

protected static string $defaultStrategyClass = \Cake\ORM\Behavior\Translate\EavStrategy::class
Tags
psalm-var

class-string<\Cake\ORM\Behavior\Translate\TranslateStrategyInterface>

Methods

__call()

Proxy method calls to strategy class instance.

public __call(string $method, array<string|int, mixed> $args) : mixed
Parameters
$method : string

Method name.

$args : array<string|int, mixed>

Method arguments.

__construct()

Constructor

public __construct(Table $table[, array<string, mixed> $config = [] ]) : mixed

Options

  • fields: List of fields which need to be translated. Providing this fields list is mandatory when using EavStrategy. If the fields list is empty when using ShadowTableStrategy then the list will be auto generated based on shadow table schema.
  • defaultLocale: The locale which is treated as default by the behavior. Fields values for defaut locale will be stored in the primary table itself and the rest in translation table. If not explicitly set the value of I18n::getDefaultLocale() will be used to get default locale. If you do not want any default locale and want translated fields for all locales to be stored in translation table then set this config to empty string ''.
  • allowEmptyTranslations: By default if a record has been translated and stored as an empty string the translate behavior will take and use this value to overwrite the original field value. If you don't want this behavior then set this option to false.
  • validator: The validator that should be used when translation records are created/modified. Default null.
Parameters
$table : Table

The table this behavior is attached to.

$config : array<string, mixed> = []

The config for this behavior.

buildMarshalMap()

Build a set of properties that should be included in the marshalling process.

public buildMarshalMap(Marshaller $marshaller, array<string|int, mixed> $map, array<string, mixed> $options) : array<string|int, mixed>

Add in _translations marshalling handlers. You can disable marshalling of translations by setting 'translations' => false in the options provided to Table::newEntity() or Table::patchEntity().

Parameters
$marshaller : Marshaller

The marhshaller of the table the behavior is attached to.

$map : array<string|int, mixed>

The property map being built.

$options : array<string, mixed>

The options array used in the marshalling call.

Return values
array<string|int, mixed>

A map of [property => callable] of additional properties to marshal.

configShallow()

Merge provided config with existing config. Unlike `config()` which does a recursive merge for nested keys, this method does a simple merge.

public configShallow(array<string, mixed>|string $key[, mixed|null $value = null ]) : $this

Setting a specific value:

$this->configShallow('key', $value);

Setting a nested value:

$this->configShallow('some.nested.key', $value);

Updating multiple config settings at the same time:

$this->configShallow(['one' => 'value', 'another' => 'value']);
Parameters
$key : array<string, mixed>|string

The key to set, or a complete array of configs.

$value : mixed|null = null

The value to set.

Return values
$this

findTranslations()

Custom finder method used to retrieve all translations for the found records.

public findTranslations(Query $query, array<string, mixed> $options) : Query

Fetched translations can be filtered by locale by passing the locales key in the options array.

Translated values will be found for each entity under the property _translations, containing an array indexed by locale name.

Example:

$article = $articles->find('translations', ['locales' => ['eng', 'deu'])->first();
$englishTranslatedFields = $article->get('_translations')['eng'];

If the locales array is not passed, it will bring all translations found for each record.

Parameters
$query : Query

The original query to modify

$options : array<string, mixed>

Options

Return values
Query

getConfig()

Returns the config.

public getConfig([string|null $key = null ][, mixed $default = null ]) : mixed

Usage

Reading the whole config:

$this->getConfig();

Reading a specific value:

$this->getConfig('key');

Reading a nested value:

$this->getConfig('some.nested.key');

Reading with default value:

$this->getConfig('some-key', 'default-value');
Parameters
$key : string|null = null

The key to get or null for the whole config.

$default : mixed = null

The return value when the key does not exist.

Return values
mixed

Configuration data at the named key or null if the key does not exist.

getConfigOrFail()

Returns the config for this specific key.

public getConfigOrFail(string $key) : mixed

The config value for this key must exist, it can never be null.

Parameters
$key : string

The key to get.

Tags
throws
InvalidArgumentException
Return values
mixed

Configuration data at the named key

getDefaultStrategyClass()

Get default strategy class name.

public static getDefaultStrategyClass() : string
Tags
since
4.0.0
psalm-return

class-string<\Cake\ORM\Behavior\Translate\TranslateStrategyInterface>

Return values
string

getTable()

Get the table instance this behavior is bound to.

public getTable() : Table

Use table() instead.

Return values
Table

The bound table instance.

implementedEvents()

Gets the Model callbacks this behavior is interested in.

public implementedEvents() : array<string, mixed>
Return values
array<string, mixed>

implementedFinders()

implementedFinders

public implementedFinders() : array<string|int, mixed>

Provides an alias->methodname map of which finders a behavior implements. Example:

 [
   'this' => 'findThis',
   'alias' => 'findMethodName'
 ]

With the above example, a call to $table->find('this') will call $behavior->findThis() and a call to $table->find('alias') will call $behavior->findMethodName()

It is recommended, though not required, to define implementedFinders in the config property of child classes such that it is not necessary to use reflections to derive the available method list. See core behaviors for examples

Tags
throws
ReflectionException
Return values
array<string|int, mixed>

implementedMethods()

implementedMethods

public implementedMethods() : array<string|int, mixed>

Provides an alias->methodname map of which methods a behavior implements. Example:

 [
   'method' => 'method',
   'aliasedMethod' => 'somethingElse'
 ]

With the above example, a call to $table->method() will call $behavior->method() and a call to $table->aliasedMethod() will call $behavior->somethingElse()

It is recommended, though not required, to define implementedFinders in the config property of child classes such that it is not necessary to use reflections to derive the available method list. See core behaviors for examples

Tags
throws
ReflectionException
Return values
array<string|int, mixed>

initialize()

Initialize hook

public initialize(array<string, mixed> $config) : void
Parameters
$config : array<string, mixed>

The config for this behavior.

setConfig()

Sets the config.

public setConfig(array<string, mixed>|string $key[, mixed|null $value = null ][, bool $merge = true ]) : $this

Usage

Setting a specific value:

$this->setConfig('key', $value);

Setting a nested value:

$this->setConfig('some.nested.key', $value);

Updating multiple config settings at the same time:

$this->setConfig(['one' => 'value', 'another' => 'value']);
Parameters
$key : array<string, mixed>|string

The key to set, or a complete array of configs.

$value : mixed|null = null

The value to set.

$merge : bool = true

Whether to recursively merge or overwrite existing config, defaults to true.

Tags
throws
CakeException

When trying to set a key that is invalid.

Return values
$this

setDefaultStrategyClass()

Set default strategy class name.

public static setDefaultStrategyClass(string $class) : void
Parameters
$class : string

Class name.

Tags
since
4.0.0
psalm-param

class-string<\Cake\ORM\Behavior\Translate\TranslateStrategyInterface> $class

setLocale()

Sets the locale that should be used for all future find and save operations on the table where this behavior is attached to.

public setLocale(string|null $locale) : $this

When fetching records, the behavior will include the content for the locale set via this method, and likewise when saving data, it will save the data in that locale.

Note that in case an entity has a _locale property set, that locale will win over the locale set via this method (and over the globally configured one for that matter)!

Parameters
$locale : string|null

The locale to use for fetching and saving records. Pass null in order to unset the current locale, and to make the behavior fall back to using the globally configured locale.

Tags
see
TranslateBehavior::getLocale()
link
https://book.cakephp.org/4/en/orm/behaviors/translate.html#retrieving-one-language-without-using-i18n-locale
link
https://book.cakephp.org/4/en/orm/behaviors/translate.html#saving-in-another-language
Return values
$this

table()

Get the table instance this behavior is bound to.

public table() : Table
Return values
Table

The bound table instance.

translationField()

Returns a fully aliased field name for translated fields.

public translationField(string $field) : string

If the requested field is configured as a translation field, the content field with an alias of a corresponding association is returned. Table-aliased field name is returned for all other fields.

Parameters
$field : string

Field name to be aliased.

Return values
string

verifyConfig()

verifyConfig

public verifyConfig() : void

Checks that implemented keys contain values pointing at callable.

Tags
throws
CakeException

if config are invalid

_configDelete()

Deletes a single config key.

protected _configDelete(string $key) : void
Parameters
$key : string

Key to delete.

Tags
throws
CakeException

if attempting to clobber existing config

_configRead()

Reads a config key.

protected _configRead(string|null $key) : mixed
Parameters
$key : string|null

Key to read.

_configWrite()

Writes a config key.

protected _configWrite(array<string, mixed>|string $key, mixed $value[, string|bool $merge = false ]) : void
Parameters
$key : array<string, mixed>|string

Key to write to.

$value : mixed

Value to write.

$merge : string|bool = false

True to merge recursively, 'shallow' for simple merge, false to overwrite, defaults to false.

Tags
throws
CakeException

if attempting to clobber existing config

_reflectionCache()

Gets the methods implemented by this behavior

protected _reflectionCache() : array<string|int, mixed>

Uses the implementedEvents() method to exclude callback methods. Methods starting with _ will be ignored, as will methods declared on Cake\ORM\Behavior

Tags
throws
ReflectionException
Return values
array<string|int, mixed>

_resolveMethodAliases()

Removes aliased methods that would otherwise be duplicated by userland configuration.

protected _resolveMethodAliases(string $key, array<string, mixed> $defaults, array<string, mixed> $config) : array<string|int, mixed>
Parameters
$key : string

The key to filter.

$defaults : array<string, mixed>

The default method mappings.

$config : array<string, mixed>

The customized method mappings.

Return values
array<string|int, mixed>

A de-duped list of config data.

referenceName()

Determine the reference name to use for a given table

protected referenceName(Table $table) : string

The reference name is usually derived from the class name of the table object (PostsTable -> Posts), however for autotable instances it is derived from the database table the object points at - or as a last resort, the alias of the autotable instance.

Parameters
$table : Table

The table class to get a reference name for.

Return values
string

        
On this page

Search results