dump() in Drupal 8 funktioniert nicht
Eingetragen von DrupalFan (1646)
am 08.04.2016 - 19:18 Uhr in
am 08.04.2016 - 19:18 Uhr in
{{ dump() }} dient in einem D8 Twig Template dazu, vorhandene Variablen auszugeben.
Funktioniert aber nicht, da wenn {{ dump() }} in einem html.twig template einegbaut ist, lädt die Seite endlos ohne je aufzuhören uns daher erfolgt auch keine dump-Ausgabe.
- Anmelden oder Registrieren um Kommentare zu schreiben
nimm für solche Zwecke das Devel-Modul
am 08.04.2016 - 19:28 Uhr
damit kannst du nicht nur Datenstrukturen ansehen.
Grüße
Ronald
Verfügbare Variablen in html.twig templates
am 08.04.2016 - 19:33 Uhr
Ich will feststellen, welche Variablen im block.html.twig verfügbar sind.
Und weiters möchte ich dann mittels preprocess auch den Usernamen im block.html.twig meines Themes verfügbar machen, oder geht das anders?
dafür ist devel genau das richtige
am 08.04.2016 - 20:48 Uhr
genau dafür gibt es das Modul Devel.
Ich denke aber, dass du im Moment viel zu kompliziert denkst.
Für 90% aller Aufgaben musst du bei Drupal nichts programmieren.
Grüße
Ronald
ronald schrieb Für 90% aller
am 08.04.2016 - 21:29 Uhr
Für 90% aller Aufgaben musst du bei Drupal nichts programmieren.
Ja stimmt, man muss fast nie programmieren.
Dennoch ist in der block.html.twig die Variable $username nicht verfügbar (auch nicht $user) oder in twig {{ username }}.
Daher programmiere in der .theme-Datei einen Hook, welcher mir dieser Variable dann in der block.html.twig zur Verfügung stellt.
Das habe ich inzwischen schon gelöst. In Drupal 8 ist alles etwas anders und man findet wenig Code-Examples.
Sorry,aber was soll dump()
am 09.04.2016 - 14:39 Uhr
Sorry,
aber was soll dump() denn für eine Funktion sein ?
In PHP selbst existiert diese Funktion jedenfalls nicht.
Du meinst vermutlich eher print_r oder var_dump
Vor allem dump() was denn (void)?
Da meinst Du wohl auch eher $_GLOBALS
Gruss
Robert
PS:
Habs gesehen, die Funktion existiert in der Twig Engine http://twig.sensiolabs.org/doc/functions/dump.html
Du musst vermutlich die Twig_Extension_Debug extension in Deiner Umgebung hinzufügen, wie es dort steht.
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
{{ dump() }}
am 09.04.2016 - 19:44 Uhr
Bitte lies mein erstes Posting oben, daraus geht hervor, dass es sich um eine Twig-Frage handelt:
{{ dump() }} ist eindeutig ein Twig-Befehl
Man braucht dazu keine Extension, denn {{ dump( content ) }} z. Bsp. funktioniert.
Warum {{ dump() }} nicht funktioniert, liegt wohl daran, dass die auszugebende Datenmenge sehr groß ist und vielleicht rekurse Datenstrukturen enthält.
Kannst Du dich nicht erinnern, was damals noch in Drupal 7 der Befehl
print_r($node)
ausgegeben hat? Ein endloser Datenhaufen (mit rekursiven Elementen).
{{ dump() }} wird wohl ähnliches ausgeben versuchen und dann scheitern.
Aber die ganz genauer Erklärung suche ich immer noch, denn warum hat man den Befehl {{ dump() }} implementiert, wenn er denn so gar nicht funktionieren will?
Diese Dump-Funktion ist wohl für den Native-Twig-Entwickler
am 09.04.2016 - 21:03 Uhr
der Drupalentwickler hat es immer mit relatv komplexen Datestrukturen zu tun, mit denen dieses Tool wohl seine Probleme hat.
Aber dafür gibt es für Drupal das Devel-Modul, das auch komplexe Datenstrukturen auflösen und darstellen kann.
Es gibt in Drupal keine einfache Variable für den User, sondern diese enthält eine komplette Struktur des Users, die nicht nur den Namen enthält.
Damit scheint die Dumpfunktion von TWIG überfordert zu sein.
Ein weiterer Grund, Devel einzusetzen.
Grüße
Ronald
Wie Devel direkt in Twig-Template nutzen?
am 10.04.2016 - 10:25 Uhr
Genau.
{{ dump() }} in Twig ist überfordert. Das sag ich auch.
Devel ist gut, eine Frage habe ich noch:
Früher in Drupal 7 hieß die Template-Datei block.tpl.php und jetzt in Drupal 8 heißt die Template-Datei block.html.twig. In dieser Template.Datei kann man Änderungen vornehmen und dafür stehen bestimmte Variablen zur Verfügung, welche am Beginn der Template-Datei aufgelistet sind.
Nun möchte ich aber (nicht nur in dieser Template-Datei sondern auch in jeder beliebigen anderen twig-Template-Datei) alle vorhandenen Variablen, welche exakt in dieser Template-Datei verfügbar sind, ausgeben.
Dies geht logischerschweise ganz einfach mit {{ dump() }}, allerdings ist {{ dump() }} überfordert/überlastet und funktioniert daher nicht.
Ich möchte nicht ausgeben, welche Variablen in der Page, in der Region, in der Node oder sonstwo verfügbar sind, was mit Devel ja enifach ist.
Ich will ausschließlich feststellen, welche Variablen alles zur Verfügung stehen DRIEKT im twig-Template, damit ich auf diese Varaiblen direkt im twig-Template verwenden kann und nicht an irgend einer anderen stelle, sondern ausschleßlich um dieses twig-Template umschreiben zu können.
Ist dafür, hier in diesem Fall eben nur ganz speziell dafür, Devel geeignet?`
Wie gebe ich den Befehl {{ dump() }} in Devel aus?
Welchen Devel-Befehl gebe ich im Twig-Template ein, damit eine Ausgabe erfolgt?
Kann Devel direkt in Twig-Templates eingreifen?
Ich möchte keine normale Devel-Ausgabe wie damals in Drupal 7 in PHP.
Ich möchte eine TWIG Ausgabe direkt im Twig-Template und eventuell über Devel.
Ist das möglich und wenn ja wie?
Hallo nochmal, schau mal ob
am 10.04.2016 - 11:05 Uhr
Hallo nochmal,
schau mal ob es so geht:
Beware of dump()
If you want to see all variables, but dump() results in exhausted memory because of recursion or the like, you can loop through _context to see the all the keys in it:
{% for key, value in _context %}- {{ key }}
{% endfor %}
Hier wird explizit darauf hingewiesen, dass dump den Speicher überladen kann bei Rekursionen:
https://www.drupal.org/node/1906780
Interessant ist auch dass {{ dump() }} equivalent zu {{ dump(_context) }} ist.
Probier mal wie oben nur die keys auszugeben.
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Hat Twig nicht auch viele Nachteile? (Die Vorteile sind gut)
am 10.04.2016 - 13:48 Uhr
Danke, das ist schon ein guter Tipp in die richtige Richtung.
Aber wenn man das anwendet, beginnen die Probleme erst:
{{ dump(_context) }} gibt gar nichts aus, als ob _context leer wäre.
Auch {{ dump(_context|keys) }} gibt nichts aus! Trotzdem scheint _context etwas zu enthalten:
Die %for-Schleife über _context gibt aber sehr wohl die keys aus:
{% for key, value in _context %}
<li>{{ key }}</li>
{% endfor %}
ergibt:
1: elements
2: theme_hook_original
3: attributes
4: title_attributes
5: content_attributes
6: title_prefix
7: title_suffix
8: db_is_active
9: is_admin
10: logged_in
11: user
12: directory
13: configuration
14: plugin_id
15: base_plugin_id
16: derivative_plugin_id
17: label
18: content
19: username
20: theme_hook_suggestions
21: theme_hook_suggestion
22: _parent
(Hinweis: username stammt von mir selbst, habe ich über die .theme-Datei in einer Hook-Funktion zur Verfügung gestellt, weil ich es brauche)
Aktiviert man in services.yml
twig.config:
debug: true
dann geht gar nichts mehr. Hier scheint twig wieder überfordert zu sein, die Seite lädt endlos ohne das je etwas ausgegeben wird.
Kann das sein, dass Twig so schlecht implementiert wurde?
Man kann nicht mal sinnvoll debuggen?
Wenn man (früher in Drupal 7) php-Templates (tpl.php) geschrieben hat und man hatte einen Syntaxfehler oder einen Programmierfehler, wurde die PHP-Fehlermeldung ausgegeben und man wusste genau, was falsch ist und was zu tun ist.
Jetzt in Twig ein Schritt in die Steinzeit??? Oder hab ich was übersehen?
Twig gibt überhaupt keinen Fehler aus, wenn auch nur ein Strich falsch ist in html.twig oder man einen beliebigen Fehler hat, kommt sofort die nichtssagende Seite
Auf der Website ist ein unvorhergesehener Fehler aufgetreten. Bitte versuchen Sie es später nochmal.
ohne eine Chance auf irgendeine Info, was man denn nun in twig falsch gemacht hat.
Programmieren oder Templates "schreiben" wie in der Steinzeit ohne Debugmöglichkeit und ohne Fehlermeldung? War das so gewollt von Dries?
{% for key, value in _context %}
<li>{{ key }}</li>
{% if loop.index == 10 %}
value: {{ value }}
{% endif %}
{% endfor %}
gibt an Stelle 10 folgendes aus:
10: logged_in
value: 1
aber
{% for key, value in _context %}
<li>{{ key }}</li>
{% if loop.index == 11 %}
value: {{ value }}
{% endif %}
{% endfor %}
gibt nur noch "Auf der Website ist ein unvorhergesehener Fehler aufgetreten. Bitte versuchen Sie es später nochmal." aus.
Man kann hier Stunden mit Twig verbringen und kommt nicht weiter, fast jede zweite Aktion führt zu überraschendem "Nicht-Funktionieren" obwohl man als Programmierer glaubt, alles richtig gemacht zu haben.
{{ dump(user) }} gibt gar nichts aus (diesmal ohne Fehlermeldung)
Und warum ist {{ dump() }} überhaupt zugelassen, wenn es denn nicht funktioniert oder schon davor gewarnt wird, dass es große Probleme damit gibt?
Weiters muss man jedesmal dazwischen den Cache löschen und das dauert eine Ewigkeit. Hat jemand einen Tipp, wie man das Löschen des Caches beschleunigen kann?
Es wird empfohlen, während
am 10.04.2016 - 13:39 Uhr
Es wird empfohlen, während der Entwicklung den Cache abzuschalten. Man sollte die Seite aber auf jeden Fall danach auch mit eingeschaltetem Cache testen um Probleme durch das Caching zu finden.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Cache ist natürlich abgeschaltet
am 10.04.2016 - 13:57 Uhr
Der Cache ist doch abgeschaltet, immer wenn man etwas entwickelt!
Man muss dennoch jedesmal den (abgeschalten!) Cache leeren, da sonst die Änderungen in den Twig-Templates ignoriert werden.
Auch
twig.config:
auto_reload: true
bringt nichts, man muss trotzdem jedesmal den (abgeschalteten) Cache löschen, damit eine Änderung in einer html.twig übernommen wird.
und auch
cache: false
bringt nichts in Twig.
Devel + kint
am 11.04.2016 - 15:29 Uhr
Hatte das gleiche Problem, aber mit dem Devel-Modul und {{ kint() }} klappts.
Hier findest du alle Infos:
https://www.drupal.org/node/1906392
Variablen, welche im twig-Template verfügbar sind
am 11.04.2016 - 17:59 Uhr
Danke. Bei deinem Link sieht man, dass die Kommentare im HTML-Code damit aktiviert werden können. Das hat bisher schon funktioniert.
Was ich suche ist:
In einem template, z. Bsp. block.html.twig mittels einer Twig-Function - z. bsp. {{ dump() }} - alle verfügbaren Variablen ausgeben, welche genau in diesem Template verwendbar sind und Daten enthalten.
Damit braucht man dann nicht mehr herumraten, was alles verfügbar ist, man sieht auf einem Blick welche Variablen und Datenstrukturen alles vorhanden sind in genau diesem Template, das man ja anpassen möchte.
If you have Devel's kint submodule you can get an accordion display of the variables available to twig
Nur solche Variablen, die im Template ...html.twig verfügbar sind möchte ich haben.
Variablen, welche im twig-Template verfügbar sind
am 11.04.2016 - 22:45 Uhr
Hab's noch nicht ausprobiert, aber wenn du kint nur im entspechenden twig-file aufrufst, sollte es dir doch eigentlich nur das relevante für dieses Template ausspucken.
Twig context array - wie damit arbeiten?
am 14.04.2016 - 15:39 Uhr
Okay
{{ kint() }}
gibt jetzt das Twig context array aus. Hier sieht man, dass es ein object user gibt:
Allerdings gibt dann der Befehl
{{ dump(user.getAccountName() ) }}
folgendes aus:
string(5) "admin"
Eigentlich möchte ich nur "admin" und nicht "string(5) "admin"".
Kann man auch auf das user-Object direkt zugreifen? Wie?
user .. object
protected account
public name - > string(5) "admin"
Wie gibt man so etwas in Twig aus?
Hallo,probiers mal mit der
am 14.04.2016 - 18:57 Uhr
Hallo,
probiers mal mit der String Ausgabe:
{{user.getAccountName()}}
anstatt mit der Ausgabe des Objekts:
{{dump(user.getAccountName() ) }}
oder
{{user.name}}
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)
Danke.
am 14.04.2016 - 20:11 Uhr
Danke.
Folgendes funktioniert:
{{ dump(user.getAccountName() ) }}
--> string(5) "admin"{{user.getAccountName()}}
--> admin{{user.account.name}}
--> adminD.h., dass man in Twig Objekte nicht mit user->account->name sondern eben einfach mit user.account.name ausgibt.
Und dump gibt die Objektstruktur aus.
Was muss man noch alles lernen, um sinnvoll Twig debuggen zu können?
Hallo DrupalFan, kennst Du
am 15.04.2016 - 08:46 Uhr
Hallo DrupalFan,
kennst Du TwigFiddle?
http://twigfiddle.com/.
Ich finde dieses Online Tool sehr hilfreich.
Gruss
Robert
https://awri.ch
Ich habe eine Schweizer Tastatur und daher kein scharfes ß ;-)