• Как написать простейший шаблонизатор на php

    Как написать шаблонизатор на php​После статьи Как написать свой фреймворк на php, один знакомый программист задал мне такой вопрос: а как работает шаблонизатор в Yii, а конкретно функция render("filename", $variables = array())? 

    Если углубиться в историю php (а он был написан как шаблонизатор в языке perl), то будет ясно, лучшего шаблонизатора, чем сам язык на нем не написать. Smarty и т.п. библиотеки,  ограничены своим API. И работа с ними напоминает история про Active Record, которую я описал в предыдущей статье.

    Итак, как можно написать простейший шаблонизатор, с тем же функционалом, что и в Yii.

    Однажды, на страницах  этого блога, уже была статья, про такой шаблонизатор. Однако, там был обзор готовой библиотеки. Сейчас, я расскажу подробнее о том, как оно работает. 

  • Как написать свой фреймворк на php. Роутер и Шаблонизатор. Урок 3

    IDeal

    В предыдущих постах мы разработали минимальную структуру фреймворка. В этой статье, наведем немного лоска - добавим простенькую тему с bootstrap'ом, меню и подробнее рассмотрим работу шаблонизатора и роутера (маршрутизатора сайта). 

    Роутер

    В прошлой статье мы создали роутер, который используя логику регулярных выражений распознает входящую sef ссылку и направляет на нужный контроллер и его метод.

    Т.е. из такой строки

    /user/profile/12

    роутер делает массив

    array('controller'=>'user','action'=>'profile', 'id'=>15)

    Мы не стали в прошлый раз писать пример использования такого решения. Исправим ситуацию, но перед этим доработаем роутер.

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

    ...
    'router' => array( 
    	'([a-z0-9+_\-]+)/([a-z0-9+_\-]+)/([0-9]+)' => '$controller/$action/$id',
    	'([a-z0-9+_\-]+)/([a-z0-9+_\-]+)' => '$controller/$action',
    	'([a-z0-9+_\-]+)(/)?' => '$controller',
    ),
    ...

    Кроме того вы можете видеть, что мы изменили правую часть массива.