Bonjour,
Quelqu’un peut-il m’expliquer pourquoi lorsque je fais la chose ci-dessous, j’ai un message d’erreur qui m’indique qu’il n’est pas possible d’accéder à la clé X sur une chaîne.
Je comprends ce que signifie le message mais je ne comprends pas pourquoi il est généré étant donné que je passe bien un tableau à ma macro :
{% import ":macro:elementMacro.html.twig" as em %}
{% set args =
{
'cleTest': 'valeur pour cleTest',
'autreNomDeCle' : 'une valeur quelconque'
}
%}
{{ em.button_p(args) }}
Voici ma macro :
{% macro button_p(args) %}
{{ dump(args) }}
{% endmacro %}
Le rendu après exécution :
Maintenant, si je fais :
{% macro button_p(args) %}
{{ dump(args.cleTest) }}
{{ dump(args['cleTest']) }}
{% endmacro %}
J’ai un message d’erreur qui indique que le clé "cleTest" n’existe pas ce qui est illogique par rapport à l’image précédente :
Impossible to access an attribute ("cleTest") on a string variable
J’ai même un message m’indiquant les clés disponibles si je mets un nom de clé qui n’existe pas :
{% macro button_p(args) %}
{{ dump(args.nomInexistant) }}
{% endmacro %}
Cela me donne le message suivant :
Key "nomInexistant" for array with keys "cleTest, autreNomDeCle" does not exist.
J’ai donc bien deux clés mais je ne peux pas les utiliser ! C’est cela que je ne comprends pas.
Je sais que je peux y accéder depuis une boucle (mais ce n’est pas ce que je veux faire) :
{% macro button_p(args) %}
{% for key, value in args %}
{{ dump(args.cleTest) }}
{% endfor %}
{% endmacro %}
Donc voici mes questions :
-
pourquoi n’est-il pas possible de faire args.cleTest ?
-
pourquoi args.cleTest fonctionne dans la boucle ?
-
comment faire pour pouvoir faire args.cleTest hors boucle ?
Merci beaucoup