Данным постом хочу представить IT-сообществу свой давний проект: PHP фреймворк «ZExt».
В результате многолетней работы в различных проектах у меня накопилась библиотека, так сказать, всяческих полезностей, облегчающих повседневный труд программиста. Некоторые компоненты данного фреймворка являються частями корпоративного фреймворка компании viboom.ru в которой я проработал продолжительное время создавая эти компоненты. От руководства компании было полученно согласие на публикацию части исходного кода фреймворка. В последнее время я провёл определённую работу по «причёсыванию» фреймворка и теперь готов его представить сообществу в надежде, что вы найдёте чего либо полезное для себя в компонентах фреймворка.
Фреймворк представляеться «как есть» и его автор не несёт ответственности за его использование.
Репозиторий на GitHub.
Фреймворк требует PHP версии не ниже 5.4.
Для работы компонентов требуется добавить пространство имён «ZExt» в автозагрузку классов (PSR-0) по пути: «my_app_library/ZExt».
Можно воспользоватся собственным автозагрузчиком классов фреймворка:
require 'my_app_library/ZExt/Loader/Autoloader.php';
ZExtLoaderAutoloader::registerDefaults();
Так же можно добавить фреймворк через Composer:
{
"require": {
"zext/zext": "dev-master"
},
"repositories": [
{
"type": "git",
"url": "https://github.com/mikemirten/ZExt"
}
]
}
Теперь немного о его компонентах:
Debug
Компонент представляющий набор средств для отладки PHP-приложений.
Может использоваться в любом приложении вне зависимости от используемых в нём фреймворков и прочих технологий.
Использует jQuery подключенный в вашем проекте или, при его отсутствии, подключает сам через GoogleApis.
Подключение отладочной панели с параметрами по умолчанию:
$debug = ZExtDebugDebugBar::initDefaults();
Вывод информации производится в нужном месте (на пример в скрипте вида (view)) через приведение объекта отладчика к строке:
echo $debug;
Результатом работы отладчика будет вот такая панель:
Попробуем бросить исключение:
throw new Exception('Looks like an error occurred...', 100);
При этом отладчик, перехватив его, вернёт отладочную информацию в качестве ответа на запрос:
Слева появился элемент «Exception» с информацией о брошенном исключении.
Совершим не фатальные ошибки:
echo $undefinedVar;
trigger_error('something wrong');
Profiler
Компонент отвечает за профилирование различных действий приложения и представляет информацию о времени и результате выполнения этих действий.
Сымитируем обращение к некому сервису приложения и добавим профилировщик в панель отладки:
$profiler = new ZExtProfilerProfiler();
$profiler->startRead('Database read');
sleep(1); // Read from some service
$profiler->stopSuccess();
$profiler->startWrite('Database write');
sleep(1); // Write to some service
$profiler->stopError();
$profiler->setName('Database')
->setIcon('db');
$debug->addProfiler($profiler);
Теперь посмотрим результаты:
Html
Компонент призван облегчить создание различных HTML-конструкций.
Возмём тег с большим количеством атрибутов:
$tag = new ZExtHtmlTag('iframe');
$tag->width = 640;
$tag->height = 480;
$tag->frameborder = 0;
$tag->scrolling = 'no';
$tag->src = 'page.php';
$tag->id = 'frame';
echo $tag;
<iframe width="640" height="480" frameborder="0" scrolling="no" src="page.php" id="frame"></iframe>
Список:
$list = new ZExtHtmlListUnordered();
$list->id = 'list';
$list->title = 'My list';
$list[] = 'Item 1';
$list[] = 'Item 2';
$list[] = 'Item 3';
$list[] = 'Item 4';
echo $list;
<ul id="list" title="My list">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
Планы развития
В планах в первую очередь стоят написание документации и дальнейшее покрытие тестами, создание сайта проекта.
Изначально фреймворк являлся лишь только библиотекой добавляющей недостающие возможности к некоторым известным фреймворкам с которыми я работал в различных проектах. Дальнейшее развитие планируется именно в этом ключе. Планируется аггрегация с некоторыми фреймворками, в частности с Phalcon.
Если сообществу будет интересен представленный проект, я буду продолжать публиковать гайды по работе с компонентами фреймворка и архитектурными решениями в которых фреймворк участвовал.
Автор: mike66