English spoken conference

Symfony 5: The Fast Track

A new book to learn about developing modern Symfony 5 applications.

Support this project

You are browsing the Symfony 4.4 documentation, which changes significantly from Symfony 3.x. If your app doesn't use Symfony 4.4 yet, browse the Symfony 3.4 documentation.

Twig Extensions Defined by Symfony

Twig Extensions Defined by Symfony

Twig is the template engine used in Symfony applications. There are tens of default filters and functions defined by Twig, but Symfony also defines some filters, functions and tags to integrate the various Symfony components with Twig templates. This article explains them all.

Tip

If these extensions provided by Symfony are not enough, you can create a custom Twig extension to define even more filters and functions.

Functions

render

1
{{ render(uri, options = []) }}
uri
type: string | ControllerReference
options (optional)
type: array default: []

Makes a request to the given internal URI or controller and returns the result. The render strategy can be specified in the strategy key of the options. It's commonly used to embed controllers in templates.

render_esi

1
{{ render_esi(uri, options = []) }}
uri
type: string | ControllerReference
options (optional)
type: array default: []

It's similar to the render function and defines the same arguments. However, it generates an ESI tag when ESI support is enabled or falls back to the behavior of render otherwise.

Tip

The render_esi() function is an example of the shortcut functions of render. It automatically sets the strategy based on what's given in the function name, e.g. render_hinclude() will use the hinclude.js strategy. This works for all render_*() functions.

controller

1
{{ controller(controller, attributes = [], query = []) }}
controller
type: string
attributes (optional)
type: array default: []
query (optional)
type: array default: []

Returns an instance of ControllerReference to be used with functions like render() and render_esi().

asset

1
{{ asset(path, packageName = null) }}
path
type: string
packageName (optional)
type: string | null default: null

Returns the public path of the given asset path (which can be a CSS file, a JavaScript file, an image path, etc.). This function takes into account where the application is installed (e.g. in case the project is accessed in a host subirectory) and the optional asset package base path.

Symfony provides various cache busting implementations via the version, version_strategy, and json_manifest_path configuration options.

asset_version

1
{{ asset_version(packageName = null) }}
packageName (optional)
type: string | null default: null

Returns the current version of the package, more information in Linking to CSS, JavaScript and Image Assets.

csrf_token

1
{{ csrf_token(intention) }}
intention
type: string - an arbitrary string used to generate the token value.

Renders a CSRF token. Use this function if you want CSRF protection in a regular HTML form not managed by the Symfony Form component.

is_granted

1
{{ is_granted(role, object = null, field = null) }}
role
type: string, string[]
object (optional)
type: object
field (optional)
type: string

Returns true if the current user has the given role. If several roles are passed in an array, true is returned if the user has at least one of them.

Optionally, an object can be passed to be used by the voter. More information can be found in Access Control in Templates.

logout_path

1
{{ logout_path(key = null) }}
key (optional)
type: string

Generates a relative logout URL for the given firewall. If no key is provided, the URL is generated for the current firewall the user is logged into.

logout_url

1
{{ logout_url(key = null) }}
key (optional)
type: string

Equal to the logout_path function, but it'll generate an absolute URL instead of a relative one.

path

1
{{ path(route_name, route_parameters = [], relative = false) }}
name
type: string
parameters (optional)
type: array default: []
relative (optional)
type: boolean default: false

Returns the relative URL (without the scheme and host) for the given route. If relative is enabled, it'll create a path relative to the current path.

url

1
{{ url(route_name, route_parameters = [], schemeRelative = false) }}
name
type: string
parameters (optional)
type: array default: []
schemeRelative (optional)
type: boolean default: false

Returns the absolute URL (with scheme and host) for the given route. If schemeRelative is enabled, it'll create a scheme-relative URL.

absolute_url

1
{{ absolute_url(path) }}
path
type: string

Returns the absolute URL from the passed relative path. Combine it with the asset() function to generate absolute URLs for web assets. Read more about Linking to CSS, JavaScript and Image Assets.

relative_path

1
{{ relative_path(path) }}
path
type: string

Returns the relative path from the passed absolute URL. For example, assume you're on the following page in your app: http://example.com/products/hover-board.

1
2
3
4
5
{{ relative_path('http://example.com/human.txt') }}
{# ../human.txt #}

{{ relative_path('http://example.com/products/products_icon.png') }}
{# products_icon.png #}

expression

Creates an Expression related to the ExpressionLanguage component.

Filters

humanize

1
{{ text|humanize }}
text
type: string

Makes a technical name human readable (i.e. replaces underscores by spaces or transforms camelCase text like helloWorld to hello world and then capitalizes the string).

trans

1
{{ message|trans(arguments = [], domain = null, locale = null) }}
message
type: string
arguments (optional)
type: array default: []
domain (optional)
type: string default: null
locale (optional)
type: string default: null

Translates the text into the current language. More information in Translation Filters.

transchoice

Deprecated since version 4.2: The transchoice filter is deprecated since Symfony 4.2 and will be removed in 5.0. Use the ICU MessageFormat with the trans filter instead.

1
{{ message|transchoice(count, arguments = [], domain = null, locale = null) }}
message
type: string
count
type: integer
arguments (optional)
type: array default: []
domain (optional)
type: string default: null
locale (optional)
type: string default: null

Translates the text with pluralization support. More information in Translation Filters.

yaml_encode

1
{{ input|yaml_encode(inline = 0, dumpObjects = false) }}
input
type: mixed
inline (optional)
type: integer default: 0
dumpObjects (optional)
type: boolean default: false

Transforms the input into YAML syntax. See Writing YAML Files for more information.

yaml_dump

1
{{ value|yaml_dump(inline = 0, dumpObjects = false) }}
value
type: mixed
inline (optional)
type: integer default: 0
dumpObjects (optional)
type: boolean default: false

Does the same as yaml_encode(), but includes the type in the output.

abbr_class

1
{{ class|abbr_class }}
class
type: string

Generates an <abbr> element with the short name of a PHP class (the FQCN will be shown in a tooltip when a user hovers over the element).

abbr_method

1
{{ method|abbr_method }}
method
type: string

Generates an <abbr> element using the FQCN::method() syntax. If method is Closure, Closure will be used instead and if method doesn't have a class name, it's shown as a function (method()).

format_args

1
{{ args|format_args }}
args
type: array

Generates a string with the arguments and their types (within <em> elements).

format_args_as_text

1
{{ args|format_args_as_text }}
args
type: array

Equal to the format_args filter, but without using HTML tags.

file_excerpt

1
{{ file|file_excerpt(line, srcContext = 3) }}
file
type: string
line
type: integer
srcContext (optional)
type: integer

Generates an excerpt of a code file around the given line number. The srcContext argument defines the total number of lines to display around the given line number (use -1 to display the whole file).

format_file

1
{{ file|format_file(line, text = null) }}
file
type: string
line
type: integer
text (optional)
type: string default: null

Generates the file path inside an <a> element. If the path is inside the kernel root directory, the kernel root directory path is replaced by kernel.project_dir (showing the full path in a tooltip on hover).

format_file_from_text

1
{{ text|format_file_from_text }}
text
type: string

Uses format_file to improve the output of default PHP errors.

file_relative

1
{{ file|file_relative }}
file
type: string

It transforms the given absolute file path into a new file path relative to project's root directory:

1
2
{{ '/var/www/blog/templates/admin/index.html.twig'|file_relative }}
{# if project root dir is '/var/www/blog/', it returns 'templates/admin/index.html.twig' #}

If the given file path is out of the project directory, a null value will be returned.

Tags

form_theme

1
{% form_theme form resources %}
form
type: FormView
resources
type: array | string

Sets the resources to override the form theme for the given form view instance. You can use _self as resources to set it to the current resource. More information in How to Customize Form Rendering.

trans

1
{% trans with vars from domain into locale %}{% endtrans %}
vars (optional)
type: array default: []
domain (optional)
type: string default: string
locale (optional)
type: string default: string

Renders the translation of the content. More information in Using Twig Tags.

transchoice

Deprecated since version 4.2: The transchoice tag is deprecated since Symfony 4.2 and will be removed in 5.0. Use the ICU MessageFormat with the trans tag instead.

1
{% transchoice count with vars from domain into locale %}{% endtranschoice %}
count
type: integer
vars (optional)
type: array default: []
domain (optional)
type: string default: null
locale (optional)
type: string default: null

Renders the translation of the content with pluralization support, more information in Using Twig Tags.

trans_default_domain

1
{% trans_default_domain domain %}
domain
type: string

This will set the default domain in the current template.

stopwatch

1
{% stopwatch 'name' %}...{% endstopwatch %}

This will time the run time of the code inside it and put that on the timeline of the WebProfilerBundle.

Tests

The following tests related to Symfony Forms are available. They are explained in the article about customizing form rendering:

Global Variables

app

The app variable is injected automatically by Symfony in all templates and provides access to lots of useful application information. Read more about the Twig global app variable.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.