Helpers

Source code should be self explanatory, keep in mind that these functions are always available from anywhere (both php and blade files) in the global scope and that are loaded by the composer autoloader mechanism. We should not put too many functions here, just those related to systemic handling like construction of URLs, links and translations.

Global helpers#

The following functions are always autoloaded and made available eveywhere in your app, both in php files and in blade.php template files.

formatUrl#

With this function we can set a standard for trailing/untrailing slash and, eventually, make it optional. Now we enforce a trailing slash on all URLs.

formatUrl(string $url = ''): string

@returns string, @params

nametyperequireddefault valuedescription
$urlstringfalse''An absolute URL

formatUrlPath#

With this function we can set a standard for trailing/untrailing slash and, eventually, make it optional. Now we enforce a trailing slash on all URLs.

note

Don't pass here an absolute URL!

formatUrlPath(string $path = ''): string

@returns string, @params

nametyperequireddefault valuedescription
$pathstringfalse''A relative URL

linkUrl#

Construct a localised URL according to the standard URL formatting conventions.

linkUrl(string $slug = '', $locale = ''): string

@returns string, @params

nametyperequireddefault valuedescription
$slugstringfalse''A relative URL
$localestringfalse''A valid locale, e.g. en

media#

Output a an absolute URL to a remote media file. It uses as base URL the assets->media value from the {CMS_API_URL}/structure endpoint.

note

Don't pass here an absolute URL!

media(string $path = ''): string

@returns string, @params

nametyperequireddefault valuedescription
$pathstringfalse''A relative URL

to#

Dynamically generate a URL to the given route.

function to($route, $args = []): string

@returns string, @params

nametyperequireddefault valuedescription
$routestringfalse''The unique route name
$argsarrayfalse[]The dynamic slug portions to interpolate

Examples (to)#

Given routes defined in {CMS_API_URL}/structure -> "routes" as:

{
"routes": [
{
"id": "myroutename",
"slug": {
"en": "/myroutename/"
}
},
{
"id": "mydynamicroutename",
"slug": {
"en": "/mydynamicroutename/:my-slug/"
}
}
]
}

Here is how to create the links in your templates:

<a href="{{ to('myroutename') }}">My route</a>
<a href="{{ to('mydynamicroutename', [ 'my-slug' => 'a-value' ]) }}">My dynamic route</a>

t#

Dynamically translate a localised string optionally interpolating variables. Strings are defined in src/assets/translations.csv, see I18n docs).

function t(string $key = '', $args = null): string

@returns string, @params

nametyperequireddefault valuedescription
$keystringfalse''The unique string name
$argsarrayfalsenullThe dynamic variables to interpolate

See example usage in the translations guide.

download#

Dynamically generate a URL to a downladable file placed in src/assets/media.

function download($path, $viewIt = false): string

@returns string, @params

nametyperequireddefault valuedescription
$pathstringtrue''The full path of the file relative to src/assets/media
$viewItbooleanfalsefalseWether you want to open the file instead of triggering an immediate download

Examples (download)#

Given a file example.pdf placed in /src/assets/media/example.pdf and a file example-nested.pdf placed in /src/assets/media/some-folder/example-nested.pdf here is how to create links in your templates:

<a href="{{ download('example.pdf') }}">Download file</a>
<x-link-outbound href="{{ download('example.pdf', true) }}">View file</x-link-outbound>
<a href="{{ download('some-folder/example-nested.pdf') }}">Download nested file</a>
<x-link-outbound href="{{ download('some-folder/example-nested.pdf', true) }}">View nested file</x-link-outbound>

downloadWithAuth#

Dynamically generate a URL to a downladable file placed in src/assets/media protecting the download with the auth middleware.

function downloadWithAuth($path, $viewIt = false): string

This work exactly the same as the download helper.