Reflection Service¶
Service class for converting complex objects to a simple array structure based of TCA configuration. Handy for faster integration development, headless systems and ajax calls.
-
class
Jar\Utilities\Services\
ReflectionService
¶ Configuration
Tip
For column definitions, you can use wildcards like “?” and “*”. So instead of define
table_class, table_caption, table_delimiter, table_enclosure, ...
specificly, you can usetable_*
.-
setPropertiesByConfigurationArray
($configuration)¶ Sets multiple properties in one call.
Parameters: - $configuration (array) – Configuration settings.
Returns: self
Example:
setPropertiesByConfigurationArray([ 'tableColumnBlacklist' => [ // don't reflect the "categories" column in tx_myextension_slides 'tx_myextension_slides' => 'categories', // don't reflect the "doktype" column and all columns // starting with "cache_" in pages 'pages' => 'cache_*, doktype' ], 'tableColumnWhitelist' => [ // just reflect the slide related fields and the header in tt_content 'tt_content' => 'tx_myextension_*, header' ], 'tableColumnRemoveablePrefixes' => [ // remove the prefix "tx_myextension_" from our columns 'tt_content' => 'tx_myextension_' ], 'tableColumnRemapping' => [ 'tt_content' => [ // rename the column "header" to "title" in the result 'header' => 'title' ] ], 'buildingConfiguration' => [ // ... same settings like "setBuildingConfiguration" (example below) ], // deactivate debug output of reflection 'debug' => false, ]);
Attention
In comparison to the direct using of setter-methods, some table-handle-definitions are commaseparated. This affects the setting for
tableColumnBlacklist
,tableColumnWhitelist
andtableColumnRemoveablePrefixes
.
-
setColumnBlacklist
($columnBlacklist)¶ Set list of columns that are generally not processed. This blacklist will be applied to every table.
Parameters: - $columnBlacklist (array) – List of columns that are generally not processed.
Returns: self
Example:
setColumnBlacklist([ 't3ver_*', 'l18n_*', 'l10n_*', 'crdate', 'cruser_id', 'editlock', /* ... */ ]);
-
setTableColumnBlacklist
($columnBlacklist)¶ Set list of table specific columns which aren’t processed.
Parameters: - $tableColumnBlacklist (array) – List of table specific columns which aren’t processed.
Returns: self
Example:
setTableColumnBlacklist([ // don't reflect the "categories" column in tx_myextension_slides 'tx_myextension_slides' => ['categories'], // don't reflect the "doktype" column and all columns // starting with "cache_" in pages 'pages' => ['cache_*', 'doktype'] ]);
-
addToTableColumnBlacklist
($tableColumnBlacklist)¶ Add to list of table specific columns which aren’t processed. Same as
setTableColumnBlacklist
without replacing the whole tableColumnBlacklist-SettingsParameters: - $tableColumnBlacklist (array) – List of table specific columns which aren’t processed.
Returns: self
-
setTableColumnWhitelist
($tableColumnWhitelist)¶ Set List of tables columns which should be processed exclusively.
Parameters: - $tableColumnWhitelist (array) – List of tables columns which should be processed exclusively.
Returns: self
Example:
setTableColumnWhitelist([ // just reflect the slide related fields and the header in tt_content 'tt_content' => ['tx_myextension_*', 'header'] ]);
-
setTableColumnRemoveablePrefixes
($tableColumnRemoveablePrefixes)¶ Set wildcard based replacement for column names. F.e.
'tt_content' => ['table_']
converts'tt_content->table_caption'
to'tt_content->caption'
Parameters: - $tableColumnRemoveablePrefixes (array) – Wildcard based replacement for column names.
Returns: self
Example:
setTableColumnRemoveablePrefixes([ // remove the prefix "tx_myextension_" from our columns 'tt_content' => ['tx_myextension_'] ]);
-
setTableColumnRemapping
($tableColumnRemapping)¶ - Set remap column-names in reflected result. F.e.
'tt_content' => ['table_caption' => 'heading']
converts'tt_content->table_caption' to 'tt_content->heading'
. - Important: takes action AFTER replacement of ColumnNames! Keep that in mind.
Parameters: - $tableColumnRemapping (array) – Remapping definition list.
Returns: self
Example:
setTableColumnRemapping([ 'tt_content' => [ // rename the column "header" to "title" in the result 'header' => 'title' ] ]);
- Set remap column-names in reflected result. F.e.
-
setBuildingConfiguration
($arrayBuildingConfiguration)¶ Contains e.g. instructions for the preparation of files and images.
Parameters: - $arrayBuildingConfiguration (array) – Instructions for the preparation of files and images.
Returns: self
Example:
setBuildingConfiguration([ 'file' => [ // we don't want deeper informations about files (f.e. filename, // extension, size, etc ..) 'showDetailedInformations' => false, // set image rendering instructions for the different cropping variants 'processingConfigurationForCrop' => [ 'desktop' => [ 'maxWidth' => 3000 ], 'medium' => [ 'maxWidth' => 1920 ], 'tablet' => [ 'maxWidth' => 1024 ], 'mobile' => [ 'maxWidth' => 920 ] ] ] ]);
Reflection output
-
buildArrayByRows
($rows, $table, $maxDepth)¶ Reflects a list of record rows.
Parameters: - $rows (array) – The record list.
- $table (string) – The tablename.
- $maxDepth (int) – The maximum depth at which related elements are loaded (default is 8).
Returns: Reflected result.
-
buildArrayByRow
($rows, $table, $maxDepth)¶ Reflects a single record row.
Parameters: - $row (array) – The record row.
- $table (string) – The tablename.
- $maxDepth (int) – The maximum depth at which related elements are loaded (default is 8).
Returns: Reflected result.
Tip
For examples output, take a look into Reflection Processor example or Reflected TCA field output examples
Getter
-
getTcaFieldDefinition
()¶ Get array for used TCA field definitions, helpful for Post-handling that prepared data.
Returns: All used TCA table and column definitions which was used on the last reflection.
Note
For each configration-Setter above there is also a getter available (f.e.
setColumnBlacklist
/getColumnBlacklist
). For the sake of clarity, these are not listed here.-
Reflected TCA field output examples¶
Reflected records are builded from the following elements.
Flat fields:¶
Link (TCA type input
with renderType inputLink
)¶
Input¶
t3://page?uid=196 _blank warning "Click me" ?bla=1
Output¶
[
'url' => 'https://example.com/a-page?bla=1',
'base' => 'https://example.com/a-page',
'params' => '?bla=1',
'target' => '_blank',
'text' => 'Click me',
'class' => 'warning',
'raw' => 't3://page?uid=196 _blank warning "Click me" ?bla=1'
]
DateTime (TCA type input
with renderType inputDateTime
and eval datetime
or date
)¶
Input¶
2021-08-25 13:31:00
Output¶
[
'unix' => 1629898260,
'day' => '25',
'dayNonZero' => '25',
'weekDayText' => 'Mittwoch',
'weekDayTextShort' => 'Mi',
'month' => '08',
'monthText' => 'August',
'monthTextShort' => 'Aug',
'year' => '2021',
'hour' => '13',
'minute' => '31',
'second' => '00',
'dateForSorting' => '2021-08-25',
'formatedDate' => '25.08.2021',
'formatedDateShort' => '25.08.21',
'formatedDateShorter' => '25.08.',
'dayOfWeek' => '3',
'weekOfYear' => '34',
'formatedTime' => '13:31',
]
Note
The example above shows german weekdays and months, this generation is based on the current active language
Relation fields:¶
Files and Images (TCA -mostly- type inline
and foreign_table
is sys_file_reference
)¶
Input¶
Sum of references. The linked records will be resolved via TCA config.
Output¶
[
[
'uid' => 1
'url' => 'fileadmin/user_upload/my-image-original.jpg',
'alt' => 'some text',
'title' => 'some text',
'description' => 'some text',
'link' => NULL,
// 'cropped' is just available for image-files
'cropped' => [
'desktop' => 'fileadmin/_processed_/1/my-image-original-max-width-3000.jpg',
'medium' => 'fileadmin/_processed_/1/my-image-original-max-width-1920.jpg',
'tablet' => 'fileadmin/_processed_/1/my-image-original-max-width-1024.jpg',
'mobile' => 'fileadmin/_processed_/1/my-image-original-max-width-920.jpg'
]
],
/* maybe more images ... */
]