У меня есть своего рода синтаксический синтаксический анализ, который я придумал, чтобы помочь мне упростить мой код представления в cakephp. По сути, я создал вспомогательный элемент таблицы, который при задании набора данных и (необязательно) набора параметров для форматирования данных будет отображать таблицу, в отличие от циклического перебора данных и их редактирования вручную.
Это позволяет пользователю быть настолько сложным или настолько простым, насколько им нравится, он может стать довольно мощным. Однако, чтобы добиться этого, мне пришлось сделать простой синтаксический анализ. В качестве быстрого примера пользователь может сделать что-то вроде этого:
$this->Table->data = $userData;
$this->Table->elements['td']['data'] = array(
'{:User.username:}',
'{:User.created:}' => array('Time::nice')
);
echo $this->Table->render();
А при рендеринге таблицы будет генерироваться:
<table>
<tbody>
<tr><td>rich97</td><td>Sun 21st 02:30pm</td></tr>
</tbody>
</table>
Проблема возникает тогда, я пытаюсь вложить скобки так:
{:User.levels.iconClasses.{:User.access:}:}
В любом случае, я могу получить только самые внутренние скобки в первом раунде и зациклить, пока не будет совпадений? Или даже сделать это за один раз? Или еще лучше использовать strpos?
Вот мое регулярное выражение в его нынешнем виде:
'/\{\:([^}]+)\:\}/'