Ich kann dir die Antwort zwar noch nicht 100% technisch herleiten, da ich den DebugViewHelper
noch nicht voll im Code analysiert habe aber ein erster Blick in den Code der File
Klasse sowie der Elternklasse AbstractFile
zeigt, dass die im Debug-Fenster gezeigten Eigenschaften auch tatsächlich als Klassen-Eigenschaften definiert wurden.
Klasse File
hat:
protected $updatedProperties = [];
private $metaDataAspect;
und Klasse AbstractFile
hat:
protected $properties;
protected $storage;
protected $identifier;
protected $name;
protected $deleted = false;
Jede dieser Klassen-Eigenschaften hat zudem eine eigene Getter-Methode
z.B. für $updatedProperties
existiert die Methode:
public function getUpdatedProperties()
{
return $this->updatedProperties;
}
Nun muss man sich vor Augen führen was genau diese Punkt-Schreibweise in Fluid macht.
Der Punkt in Fluid steht nämlich für den Aufruf einer solchen get
Methode.
Randnotiz: Wo das genau umgewandelt wird kann ich gerade nicht mehr sagen. Ich erinnere mich aber daran, dass Stefan Frömken das mal in einem seiner YouTube Videos erklärt/gezeigt hatte.
Wenn du file.originalFile.publicUrl
in Fluid schreibst, dann passiert also folgendes im Hintergrund:
- Irgendwo vorher in deinem Fluid-Code durchläufst du das Array
files
und gibst den Items den Bezeichner file
, das ist also unser Startknoten
- Die Items bzw. hier
file
entsprechen dem Typ FileReference
FileReference
nutzt die Klassen-Variable $originalFile
vom Typ FileInterface
mit entsprechender Getter-Methode getOriginalFile()
getOriginalFile()
liefert nun ein Objekt vom Typ File
zurück
- Dieses Objekt
File
hat nun zwar eine Getter-Methode getPublicUrl()
aber keine zugehörige Variable $publicUrl
.
Folgende Dinge schließe ich daraus:
- Die Fluid-Punkt-Notation greift auch hier, um die richtige Getter-Methode anzusprechen
- Die Debug-Ausgabe gibt
publicUrl
nicht zurück, da die Klassen-Variable nicht existiert
Soweit ich auf den ersten Blick sehe, nutzt der DebugViewHelper
bzw. die dahinter stehende Methode DebuggerUtility::var_dump
die PHP-Funktion ReflectionClass::getProperties
, welche die Eigenschaften der Klasse zurück gibt. Diese Funktion hat natürlich erstmal keine Kenntnis über die Fluid-Konvention bzw. Interpretation der Punkt-Schreibweise.
Wenn ich so darüber nachdenke wäre das doch mal eine sinnvolle Core-Erweiterung. Der DebugViewHelper
sollte nicht nur die Klassen-Eigenschaften ausgeben sondern auch jegliche öffentliche get
-Methode (natürlich von der Schreibweise her entsprechend der Konvention umgewandelt). Schließlich lassen sich ja auch letztere in Fluid nutzen und die Leute möchten ja einen Überblick über alle ausgebbaren Informationen im DebugViewHelper
erhalten. Vielleicht sollte man dafür mal ein Issue auf Forge anlegen. Was meint ihr?