String zu mehrdimensionalem Array machen
Verfasst: 18.02.2022 10:06
Hallo zusammen,
ich hab in der DB Template-Variablen gespeichert, bspw.: slider.item1.headline1 = "Headline1".
Ich verwende Symfony-Framework. Wenn ich einfach "slider.item1.headline1" an das Twig-Template weitergeb, wird das nicht verwendet, weil die Punkte als mehrdimensionales Array (oder verschachteltes Objekt) interpretiert werden (https://symfony.com/doc/current/templat ... -variables).
Ich hab mir jetzt eine Routine gebaut die den String in ein mehrdimensionales Array umwandelt.
Mir gefällt aber das eval() nicht, PHP-Storm mag es auch nicht, wird als Fehler markiert.
Wie könnte man das schöner lösen (ohne eval)?
Hier meine Methode:
Vielen Dank schon mal.
Beste Grüße, Beneboy
ich hab in der DB Template-Variablen gespeichert, bspw.: slider.item1.headline1 = "Headline1".
Ich verwende Symfony-Framework. Wenn ich einfach "slider.item1.headline1" an das Twig-Template weitergeb, wird das nicht verwendet, weil die Punkte als mehrdimensionales Array (oder verschachteltes Objekt) interpretiert werden (https://symfony.com/doc/current/templat ... -variables).
Ich hab mir jetzt eine Routine gebaut die den String in ein mehrdimensionales Array umwandelt.
Mir gefällt aber das eval() nicht, PHP-Storm mag es auch nicht, wird als Fehler markiert.
Wie könnte man das schöner lösen (ohne eval)?
Hier meine Methode:
Code: Alles auswählen
protected function convertTemplateVarsFromDatabase($tplvars): array
{
$myvar = [];
foreach ($tplvars as $tv)
{
$handle = preg_replace('/[^a-zA-Z0-9._]/', '_', $tv['handle']);
$tplsplit = explode('.', $handle);
$mem = "";
foreach ($tplsplit as $eitem)
{
$mem .= "['" . $eitem . "']";
}
$content = $tv['htmltext'];
eval('$myvar' . $mem . ' = $content;');
}
return $myvar;
}
Beste Grüße, Beneboy