Возникла задача дать пользователям возможность писать свои шаблоны, которые потом будут рендерится. По понятным причинам дать возможность писать просто php код я не хочу, потому eval отпадает.
Сейчас склоняюсь к альтернативному языку шаблона который потом буду разбирать.
Основные требования шаблона это вывод переменных и перебор циклами. Все переменные что использует шаблон задаются жестко в коде и пользователь к ним доступа не имеет. И если он использует в шаблоне те переменные которые не определены они или заменятся на пустую строку, или проигнорируются.
Реализовал это так.
к примеру есть шаблон
<b>{$title}</b><br/>
{foreach $names as $name}<br/>
{$name}<br/>
{/foreach}<br/>
Регулярными выражениями выделяю код что между foreach повторяю его пока не закончится массив $names и заменяю через strtr {$name} на значение переменной текущей итерации цикла. С {$title} тоже только без цикла.
Но хочется немного больше возможностей. К примеру базовая работа с if else, получение свойств обьектов, возможность перебора не просто переменной, а результата выполнения метода обьекта ( {foreach$post->getUsers() as $user} ), вызов методов объектов с параметрами.
Вообщем это все что хотелось бы. Возможно у кого то будут идеи. Поскольку реализовывать этот функционал тем способом что я выбрал долго и сложно. Может есть какие то библиотеки реализующие подобный функционал.