Symfony: Multiple Twig Extensions

Bei der Verwendung von mehreren Twig Extensions mit jeweils eigenen Funktionen bekommt man schnell eine Fehlermeldung à la

The function “my_function” does not exist in mytemplate.html.twig at line 42

Meine erste Idee war, dass das an der Art der Registrierung in den Extensions liegt:

– vielleicht überschreibt ja jeder Aufruf von getFunctions() das vorherige Array? Mein Ansatz: Statt der Rückgabe eines Arrays in getFunctions() lieber jede Funktionen (hier: im Konstruktor der Extension) separat adden:

Leider lag es gar nicht daran. Stattdessen hatte ich einfach in der zweiten, neuen Extension nach dem Copy&Paste vergessen, den Namen zu korrigieren:

Der fungiert offenbar als eine Art Namespace, in dem sie die Arrays vermutlich tatsächlich überschrieben haben 🙂 Anyway: Die alternative Methode der Definition von Funktionen mag noch mal hilfreich sein.

AIR Native Extensions mit FDT

AIR Native Extensions (ANE) erlauben das Verwenden von System-spezifischen Funktionen – hier das Gyroscope. Mit FDT 4.5 verwendet man sie wie folgt:

  1. Die .ane-Datei kopieren, und die Kopie in .swc umbenennen.
  2. Die .swc wie gewohnt in den Classpath einbinden.
  3. In den Projekteigenschaften -> “FDT Build Path” -> “Build Order” die SWC auswählen, und einen Haken bei “Use as Runtime Shared Code” setzen.
  4. Die Extension im Description-XML deklarieren: Entgegen der Vorlage der Powerflasher heißt der Knoten nicht <extension>, sondern <extensions>, und sieht für dieses Beispiel wie folgt aus:
    <extensions><extensionID>com.adobe.gyroscope</extensionID></extensions>
  5. Die .ane-Datei im Projekt ablegen, beispielsweise unter /bin/ane/
  6. Im Build-XML (das mit dem ADT-Compiler) folgende Zeilen hinzufügen:
    <arg value=”-extdir” />
    <arg value=”../bin/ane” />
  7. Kompilieren 🙂

Tipp, Quelle 1, Quelle 2 (PDF)