Skip to main content

Special Types

Returning parsed value from Static Files

By default, any value in the static files (*.env) are parsed as string.

You can parse to a specific types using this syntax:

PARAM1=!parser VALUE

Where !parser is one of the pre-defined parsers:

ParserDescriptionExample
!boolParse to booleanPARAM=!bool true
!intParse to integerPARAM=!int 10
!floatParse to floatPARAM=!float 3.5
!jsondecodeParse to JSON and transform to an arrayPARAM=!jsondecode {"a":"b"}
!arrayParse to arrayPARAM=!array 1,2,3,4
!dictParse to dictionary (associative array)PARAM=!dict a=1,b=2
!unescUnescape the valuePARAM=!unesc a\nb
!fileLoad the content of a filePARAM=!file /path/to/file

Adding a new Parser

You can add a new special type:

<?php
use ByJG\Config\ParamParser;

if (!ParamParser::isParserExists('mytype')) {
ParamParser::addParser('mytype', function ($value) {
return 'mytype:' . $value;
});
}

Then you can use:

PARAM1=!mytype 123

Using Param::get() to Postpone Container Calls

Important

When we need to get dependencies from the container, we must use Param::get() instead of Config::get(). This is because Param::get() postpones the call to the container until the dependency is actually needed, preventing infinite loops when dependencies reference each other.

This will cause an error:

<?php
use ByJG\Config\Param;
use ByJG\Config\DependencyInjection as DI;
use Example\Square;

return [
"side" => 4,
"Calculator" =>DI::bind(Area::class)
->toInstance(),
Square::class => DI::bind(Square::class)
->withConstructorArgs([
Config::get('side'),
Config::get('Calculator')])
->toInstance(),
];

and this is the fix:

<?php
use ByJG\Config\Param;
use ByJG\Config\DependencyInjection as DI;
use Example\Square;

return [
"side" => 4,
"Calculator" =>DI::bind(Area::class)
->toInstance(),
Square::class => DI::bind(Square::class)
->withConstructorArgs([
Param::get('side'),
Param::get('Calculator')])
->toInstance(),
];

Open source ByJG