fenom-template / fenom

Template Engine for PHP. Maintainers wanted!
Other
446 stars 108 forks source link

Парсинг массива, записанного на php #236

Closed faitno closed 8 years ago

faitno commented 8 years ago

Можно ли с помощью fenom распарсить следующую строчку, преобразовав её в массив?

[
'key'   => 'val',
'key2'  => 'val2',
'key3'  => 'val3'
]

т.е. строчка дана в виде $string переменной (как часть шаблона сайта, подтягивается из базы данных), хотелось бы преобразовать её в ассоциативный массив средствами fenom. Подскажите в каком направлении копать. не хотелось бы для этого использовать eval($php_code)

maxisoft-git commented 8 years ago

без eval не обойдется, феном не даст ничего кроме как модификатор который вы можете написать но опять же в нем будет ваш eval($code);

faitno commented 8 years ago

Ага, вижу, т.е. в результате все равно даже в fenom запускается eval. А можно как-то валидацию произвести через fenom, прежде чем отправлять код в eval? знаю, что к примеру в fenom вот такой код будет валидным, а в php - нет. (пропущены запятые)

[
'key'   => 'val'
'key2'  => 'val2'
'key3'  => 'val3'
]
bzick commented 8 years ago

eval вызывается только при первой компиляции, далее используется include кеша

bzick commented 8 years ago

Нативно шаблонизатор таким не занимается. Но вы можете научить шаблонизатор парсить строки как вам угодно, например через модификатор

$fenom->addModifier("parse_array", function ($code) {
    return eval("<?php return ".$code); // но я бы порекоментовал не использовать eval,
    // а передавать строку, например, в виде JSON.
});

далее в шаблне

{set $data = $array_string|parse_array}
... используете $data как массив