Objet d'accès Twig
je veux accéder à la valeur d'un objet à l'intérieur d'un template twig.
Normalement, je devrais obtenir le retour comme ça:
echo $lang->get("test");
Mais comment puis-je faire la même dans le modèle avec twig?
J'ai essayé plusieurs méthodes mais aucune n'a fonctionné.
Pour exemple, j'ai essayé:
{{ attribute(lang, get, 'test') }}
avec le résultat
Catchable fatal error: Argument passé à 3
Twig_Node_Expression_GetAttr::__construct() doit être une instance de
Twig_Node_Expression_Array, de l'instance de Twig_Node_Expression_Constant
compte tenu de
grâce
source d'informationauteur user1766080
Vous devez vous connecter pour publier un commentaire.
Ce que vous essayez de faire est d'appeler une méthode sur un objet avec les paramètres dans un template Twig. Je ne pense pas que ce soit pris en charge, comme c'est probablement considéré comme une mauvaise idée. Brindille prend en charge la notion de getters sur un objet, qui sont appelé sans paramètres:
vais essayer d'invoquer l'une des opérations suivantes, dans cet ordre:
$lang->test
$lang->test()
$lang->getTest()
$lang->isTest()
Si l'objet implémente l'un de ces accesseurs et des conventions, Twig va le trouver. Rien en dehors de cette convention, comme
get('test')
ne fait pas partie de Brindille à la philosophie. Et il n'est pas largement utilisé langage en général, de sorte que vous devrait probablement s'en tenir à l'une des méthodes ci-dessus.Voir http://twig.sensiolabs.org/doc/templates.html#variables.
Vous pouvez mettre en œuvre
__isset
__get
ou__call
méthodes magiques à l'appui de l'une de ces méthodes d'accès.Je sais que c'est une vieille question, mais après 3 heures de récurer l'internet, et ne pas trouver des exemples, je voulais m'assurer qu'il est bien documenté.
Revenir à l'original de vos tentatives:
Je suis en train de faire la même chose, et cela devrait fonctionner selon le la documentation. Malheureusement, il n'y a pas d'exemples de l'utilisation de ce. Tout ce que je trouve est que le nom de la méthode (get) a dû être une chaîne de caractères ('get'), donc j'ai changé, mais il ne fonctionne toujours pas. Ce que j'ai fait c'était ça:
Cela fonctionnait très bien, mais c'est beaucoup de code à écrire quand je dois faire tout ceci. J'ai donc fait un modèle simple avec les deux méthodes et examiné la sortie compilée. L'original a été compilé à ceci:
et la deuxième (2 lignes):
Après examen, j'ai réalisé la différence (vérifier la 3ème paramètres de getAttribute), les arguments en paramètre est un tableau! Ceci est bon à savoir pour le savoir. J'ai changé mon original à présent:
et il travaille maintenant!
Espère que cela aide quelqu'un!