YamlFileLoader
A YAML file loader that allows to load YAML files, based on the Symfony/Yaml component
In addition to just load a YAML file, it adds some special functionality.
-
A special "imports" key in the YAML file allows to include other YAML files recursively. The actual YAML file gets loaded after the import statements, which are interpreted first, at the very beginning. Imports can be referenced with a relative path.
-
Merging configuration options of import files when having simple "lists" will add items to the list instead of overwriting them.
-
Special placeholder values set via %optionA.suboptionB% replace the value with the named path of the configuration The placeholders will act as a full replacement of this value.
-
Environment placeholder values set via %env(option)% will be replaced by env variables of the same name
Table of Contents
Constants
- PATTERN_PARTS = '%[^(%]+?\([\'"]?([^(]*?)[\'"]?\)%|%([^%()]*?)%'
- PROCESS_IMPORTS = 2
- PROCESS_PLACEHOLDERS = 1
Methods
- __construct() : mixed
- load() : array<string|int, mixed>
- Loads and parses a YAML file, and returns an array with the found data
- containsPlaceholder() : bool
- Finds possible placeholders.
- getFileContents() : string
- Put into a separate method to ease the pains with unit tests
- getParts() : array<string|int, mixed>
- getStreamlinedFileName() : string
- Fetches the absolute file name, but if a different file name is given, it is built relative to that.
- hasFlag() : bool
- loadAndParse() : array<string|int, mixed>
- Internal method which does all the logic. Built so it can be re-used recursively.
- processImports() : array<string|int, mixed>
- Checks for the special "imports" key on the main level of a file, which calls "load" recursively.
- processPlaceholderLine() : mixed
- processPlaceholders() : array<string|int, mixed>
- Main function that gets called recursively to check for %...% placeholders inside the array
- processSinglePlaceholder() : mixed
Constants
PATTERN_PARTS
public
mixed
PATTERN_PARTS
= '%[^(%]+?\([\'"]?([^(]*?)[\'"]?\)%|%([^%()]*?)%'
PROCESS_IMPORTS
public
mixed
PROCESS_IMPORTS
= 2
PROCESS_PLACEHOLDERS
public
mixed
PROCESS_PLACEHOLDERS
= 1
Methods
__construct()
public
__construct(LoggerInterface $logger) : mixed
Parameters
- $logger : LoggerInterface
load()
Loads and parses a YAML file, and returns an array with the found data
public
load(string $fileName[, int $flags = self::PROCESS_PLACEHOLDERS | self::PROCESS_IMPORTS ]) : array<string|int, mixed>
Parameters
- $fileName : string
-
either relative to TYPO3's base project folder or prefixed with EXT:...
- $flags : int = self::PROCESS_PLACEHOLDERS | self::PROCESS_IMPORTS
-
Flags to configure behaviour of the loader: see public PROCESS_ constants above
Return values
array<string|int, mixed> —the configuration as array
containsPlaceholder()
Finds possible placeholders.
protected
containsPlaceholder(mixed $value) : bool
May find false positives for complexer structures, but they will be sorted later on.
Parameters
- $value : mixed
Return values
boolgetFileContents()
Put into a separate method to ease the pains with unit tests
protected
getFileContents(string $fileName) : string
Parameters
- $fileName : string
Return values
string —the contents or empty string if file_get_contents fails
getParts()
protected
getParts(string $placeholders) : array<string|int, mixed>
Parameters
- $placeholders : string
Return values
array<string|int, mixed>getStreamlinedFileName()
Fetches the absolute file name, but if a different file name is given, it is built relative to that.
protected
getStreamlinedFileName(string $fileName, string|null $currentFileName) : string
Parameters
- $fileName : string
-
either relative to TYPO3's base project folder or prefixed with EXT:...
- $currentFileName : string|null
-
when called recursively this contains the absolute file name of the file that included this file
Tags
Return values
string —the contents of the file
hasFlag()
protected
hasFlag(int $flags, int $flag) : bool
Parameters
- $flags : int
- $flag : int
Return values
boolloadAndParse()
Internal method which does all the logic. Built so it can be re-used recursively.
protected
loadAndParse(string $fileName, int $flags, string|null $currentFileName) : array<string|int, mixed>
Parameters
- $fileName : string
-
either relative to TYPO3's base project folder or prefixed with EXT:...
- $flags : int
- $currentFileName : string|null
-
when called recursively
Return values
array<string|int, mixed> —the configuration as array
processImports()
Checks for the special "imports" key on the main level of a file, which calls "load" recursively.
protected
processImports(array<string|int, mixed> $content, int $flags, string|null $fileName) : array<string|int, mixed>
Parameters
- $content : array<string|int, mixed>
- $flags : int
- $fileName : string|null
Return values
array<string|int, mixed>processPlaceholderLine()
protected
processPlaceholderLine(string $line, array<string|int, mixed> $referenceArray) : mixed
Parameters
- $line : string
- $referenceArray : array<string|int, mixed>
processPlaceholders()
Main function that gets called recursively to check for %...% placeholders inside the array
protected
processPlaceholders(array<string|int, mixed> $content, array<string|int, mixed> $referenceArray) : array<string|int, mixed>
Parameters
- $content : array<string|int, mixed>
-
the current sub-level content array
- $referenceArray : array<string|int, mixed>
-
the global configuration array
Return values
array<string|int, mixed> —the modified sub-level content array
processSinglePlaceholder()
protected
processSinglePlaceholder(string $placeholder, string $value, array<string|int, mixed> $referenceArray) : mixed
Parameters
- $placeholder : string
- $value : string
- $referenceArray : array<string|int, mixed>