PHP Микрофреймворк HLEB

Скачать (90 KB)Скачать c GitHub
Предназначение Установка Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Дополнительно

Дополнительно

Установка и обновление: использование Composer

Установка: локальный запуск при помощи встроенного веб-сервера PHP

Маршрутизация: установка формата для адреса

Маршрутизация: использование переменных в файлах роутов

Использование отладочной панели Debug Panel

Маршрутизация: регулярное выражение для динамических значений

Шаблоны: использование includeTemplate

Шаблоны: кэширование при помощи includeCachedTemplate

Установка и обновление: использование Composer

Установить актуальную версию проекта при помощи консольной команды (требует установленный менеджер пакетов Composer):
$ composer create-project phphleb/hleb
Обновить только ядро фреймворка (выполнить из папки с установленным проектом):
$ composer require phphleb/framework
Обновить все установленные зависимости:
$ composer update

Установка: локальный запуск при помощи встроенного веб-сервера PHP

Самый простой способ предварительно запустить приложение локально - это выполнить из консоли пару команд, первая из которых переносит в публичную папку фреймворка (необходимо указать правильный путь), вторая запускает проект по адресу localhost:8000. Таким образом можно убедиться, что фреймворк установлен правильно.
$ cd ~/public
$ php -S localhost:8000

Маршрутизация: установка формата для адреса

Переданные с контроллером значения можно использовать для различных целей, например, для назначения локали и/или формата данных.
Route::get('/get_data/')->controller('AjaxTestController@data', ['json', 'en']);
Переданный формат данных может быть использован для установки Content-Type, так запрос формата json изменит Content-Type в application/json.
// Файл /app/Controllers/AjaxTestController.php ... function data($format, $locale) { ... } ...
Реализация подобного назначения формата для группы маршрутов:
Route::before('SetHeadersBefore@contentType', ['json'] ); Route::getGroup(); Route::get( ... ); Route::get( ... ); Route::endGroup();

Маршрутизация: использование переменных в файлах роутов

Так как карта маршрутизации содержит обычный код PHP, то допустимо использовать все его возможности с единственным ограничением: без использования внешних данных. Например, задание переменных:
$page = "test"; Route::get("/$page/first/", ... ); Route::get("/$page/second/", ... );
В данном примере на практике уместнее было бы использовать префикс группы. Однако, вынос значений в переменные может привести к созданию универсального шаблона маршрутов для использования в дальнейшем.

Использование отладочной панели Debug Panel

В микрофреймворк HLEB добавлена отладочная панель, активная только в DEBUG-режиме. Она подключается при помощи строки:
// Файл /app/Optional/MainConnect.php ... [ "Phphleb\Debugpan\DPanel" => "vendor/phphleb/debugpan/DPanel.php" ] ...
После подключения можно настроить эту панель, добавив собственные данные для вывода, используя методы классов \Hleb\Main\MyDebug и \Hleb\Main\WorkDebug.

MyDebug

Создав класс FirstBefore или любым подобным способом:
// Файл /app/Middleware/Before/FirstBefore.php namespace App\Middleware\Before; use Hleb\Main\MyDebug; class FirstBefore extends \MainMiddleware { function index() { MyDebug::add("SERVER", $_SERVER ?? []); MyDebug::add("SESSION", $_SESSION ?? []); MyDebug::add("REQUEST", $_REQUEST ?? []); // Пример последовательного добавления if (isset($_COOKIE)) { foreach ($_COOKIE as $key => $value){ MyDebug::insert_to_array("COOKIE", "<b>$key</b>: " . $value); } } } }
Первым аргументом здесь указывается желаемое название вкладки, при этом для MyDebug::add() вторым параметром обязателен массив, а для MyDebug::insert_to_array() второй аргумент - любое значение, добавляемое в массив по имени. Также можно использовать метод MyDebug::insert_to_string(), в котором вторым аргументом добавляется строковое значение.

Теперь в отладочной панели появятся четыре дополнительные вкладки с параметрами, при условии, что этот класс подключён в карте маршрутов перед проверяемыми маршрутами.
Route::before('FirstBefore')->getGroup(); Route::get('/', 'Данные выведены в панель отладки.'); ... // Распространить правило на подключаемый файл include 'other_routes.php'; Route::endGroup();
Применение класса WorkDebug аналогично MyDebug, только служит для временного вывода данных при помощи var_dump, которые размещаются поверх страницы в отдельной панели. Отладочные данные этих классов доступны для добавления везде в проекте, кроме After-классов, которые выполняются после вывода основного контента.
\Hleb\Main\WorkDebug::add($data);
// Равносильно print_r2($data);
// С описанием \Hleb\Main\WorkDebug::add($data2, 'Описание data2');
Более простым и запоминающимся аналогом для вызова WorkDebug::add() является функция print_r2() c такими же аргументами.

Маршрутизация: регулярное выражение для динамических значений

Регулярное выражение в методе where() может принимать различные условия, в рамках правил составления регулярных выражений, например:
Route::get('/{page}/', 'Все вхождения по условию, кроме /map/.')->where(['page' => '(?!(map))[a-z0-9\-_]+']); Route::get('/map/', 'Отдельная обработка /map/.');
Данный пример не совсем отвечает интуитивно понятному способу составления карты маршрутов, в реальном проекте лучше определить эту закономерность при помощи очередности поиска подходящего маршрута:
Route::get('/map/', 'Отдельная обработка /map/.'); Route::get('/{page}/', 'Все вхождения по условию, кроме /map/.')->where(['page' => '[a-z0-9\-_]+']);

Шаблоны: использование includeTemplate

Части кода в подключаемых файлах папки views могут повторятся. Чтобы вынести их в отдельный шаблон, независимый от окружающего контента, используется функция includeTemplate(), первым аргументом которой указывается название шаблона из папки resources/views, а вторым - массив переменных, которые будут доступны в шаблоне по ключам массива. Для отличия шаблонов от других файлов их рекомендуется разместить в отдельной папке templates.
// Файл /resources/views/content.php includeTemplate('templates/name', ['p1'=>'data1', 'p2'=>'data2']);
// Файл /resources/views/templates/name.php echo $p1; // data1 echo $p2; // data2

Шаблоны: кэширование при помощи includeCachedTemplate

В отдельных случаях, если содержимое шаблона требует существенных расчётов, но данные неизменны некоторое время, есть возможность задать кэширование. Чем больше производительности требуют эти вычисления, тем больший прирост в скорости обработки блока можно получить при последующих обращениях, так как в кэше он сохранен как обычный html-текст.
Кэширование будет привязано к пользовательской сессии и заданному времени в методе setCacheTime(), который необходимо расположить в шаблоне includeCachedTemplate(). Аргументы последнего индентичны функции includeTemplate(), единственное отличие, что заданное в шаблоне время кэширования приведет к кэшированию содержимого. Все изменения содержимого для конкретного пользователя будут недоступны до истечения указанного срока. Также следует учесть, если шаблон задан через функцию includeCachedTemplate() и в нём установлено время кэширования, то где бы он не был использован в проекте, кэшированное значение его будет для текущего пользователя одинаковым.
// Файл /resources/views/content.php includeCachedTemplate('templates/cached/name');
// Файл /resources/views/templates/cached/name.php $this->setCacheTime(60); // задание времени кеширования в секундах echo rand(); // рандомное число будет неизменно в течении минуты

Кэширование должно быть рационально и обдуманно в каждом случае, иначе результат может слишком явно не соответствовать вычисляемым данным. Например, рекомендуется кэшировать блоки, содержащие информацию, которая рассчитывается из текущего названия месяца или ежедневно обновляемого курса валют. Но и в таком случае значение желательно устанавливать не более 10 минут (600 секунд).
Если это определение без особых затрат производительности, вроде прямого получения даты из PHP-функции date(), то эффективности от кэширования не будет.

Также при использовании дополнительно передаваемых параметров, через функцию includeTemplate(), возможно отсутствие пользы от кеширования, если эти параметры часто изменяются. В случае возникновения каких-либо сомнений при использовании этой функции, лучше заменить её на функцию includeTemplate().

Для удаления всего кэша шаблонов - удалить содержимое папки /storage/cache/templates/.




Предназначение Установка Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Дополнительно


HLEB - PHP Микрофреймворк Свободная лицензия. Без гарантий. © fomiash 2019