Karmo
Karmo

Reputation: 393

Symfony & Twig: how to get vars in twig by DB data?

One question please.

{{ dump(app.user.slugName) }}

If I do the above snippet in Twig, I get the slugName of the user loged ("my-user-2", i.e.) in the app (SlugName is an atribute of the entity user). Ok & Correct. But... I want to order this action from a var (var from BD data)

I have a variable named option which is set like this:

{% set option = 'app.user.slugName' %}

But when I'm trying output this variable with {{ dump(option)}} it returns app.user.slugName as literal. It does not return my-user-2.

Is there are any way in twig to solve this? It's a function to generate a menu, but some links needs some parameters.

Upvotes: 0

Views: 120

Answers (1)

DarkBee
DarkBee

Reputation: 15654

I see what you mean, but Twig can't evaluate expression like that.
To achieve something like that you would need a snippet like this,

{% set value_methods = 'app.user.slugname' %}

{% set option_value = _context %}
{% for method in (value_methods|split('.')) if method != '' %}
    {% set option_value = attribute(option_value, (method|replace({'()': '', }))) %}
{% endfor %}

{{ option_value }}

twigfiddle


(edit) Remember you can create a macro to achieve some reusability for this snippet,

{% import _self as macros %}
{{ macros.evaluate(_context, 'app.user.slugname') }}


{% macro evaluate(context, value_methods) %}
    {% set option_value = context %}
    {% for method in (value_methods|split('.')) if method != '' %}
        {% set option_value = attribute(option_value, (method|replace({'()': '', }))) %}
    {% endfor %}
    {{ option_value }}
{% endmacro %}

Upvotes: 1

Related Questions