Stringifizierbare Klassen laden, bevor YAML::Load() aufgerufen wird
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 30 Jan 2013 11:55:41 +0000 (12:55 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 30 Jan 2013 12:21:17 +0000 (13:21 +0100)
commite50a96228a0f46ffbc7548848fb051094b463f17
treee8ec016632d5089f11ff84819d98fd9b631ee404
parent117fefacdfaf457a502b32bae2f0e10fd0e11414
Stringifizierbare Klassen laden, bevor YAML::Load() aufgerufen wird

Hintergrund. Normalerweise dumpt YAML Klassen sinnvoll, sprich mit
Typus, Paketnamen und Innereien. Für eine Instanz von
SL::Locale::String könnte das z.B. so aussehen:

--- !!perl/hash:SL::Locale::String
untranslated: Invoice

Lädt mal das wieder, so entsteht daraus auch ein Objekt. Allerdings
ist es zwingend erforderlich, dass Perl die Klassendefinition zum
Zeitpunkt von YAML::Load() bereits gesehen hat. Ansonsten geht die
Stringifizierung verloren, weil sie zum Zeitpunkt des "bless()"ens
nicht bekannt war.

Das passierte mit normalen CGI, weil der Controller selber erst nach
dem Auslesen der Session via "require..." geladen wird, der Controller
lädt Rose-DB-Model, das lädt SL::Locale::String.
SL/Auth/SessionValue.pm