Translate
Эта версия фреймворка устарела, воспользуйтесь HLEB2

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

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

Регистрация

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

HLOGIN

Библиотека HLOGIN расширяет возможности фреймворка HLEB, добавляя полноценную регистрацию пользователей на сайте, которая отличается простотой настроек и быстрой установкой, и, вместе с тем, удобной и разнообразной функциональностью, поддерживающей мультиязычность и несколько вариантов дизайна. Опционально можно вывести форму обратной связи, которая идёт дополнительно к регистрации и авторизации. В автоматически создаваемой админпанели находятся средства для управления пользователями и настройки отображения. После внедрения регистрации можно сразу направить свои мысли на создание контента для сайта.

base
Дизайн панели регистрации
dark
Дизайн окна регистрации темная тема


game
Дизайн окна регистрации для игры
sport
Дизайн попап регистрации


special
Окно регистрации
light
Дизайн окна регистрации

Установка

Шаг 1. Установка через Composer в существующий проект на основе фреймворка HLEB:
$ composer require phphleb/hlogin
Шаг 2. Установка библиотеки в проект. Будет предложено выбрать дизайн из нескольких: $ php console phphleb/hlogin --add $ composer dump-autoload

Подключение

Шаг 3. Перед выполнением этого действия необходимо иметь действующее подключение к базе данных. В настройках проекта `/database/dbase.config` нужно добавить подключение по образцу и указать его название там же в константе HLEB_TYPE_DB. После этого консольной командой создаются необходимые таблицы и пользователь с правами администратора (будет предложено указать E-mail и пароль):
$ php console hlogin/create-login-table-task
Если нет возможности выполнить консольную команду, то создайте таблицы SQL-запросом из файла `/vendor/phphleb/hlogin/standard_users.sql`. После этого зарегистрируйте администратора и установите ему `reqtype` равное 11.

Шаг 4. Теперь вы можете перейти на главную страницу-заглушку сайта, если он установлен без изменений и убедиться, что доступны панели авторизации. Если библиотека устанавливается в разрабатываемый проект на фреймворке HLEB не с начала и заглушка удалена, то проверьте вход на странице `/en/login/action/enter/` сайта (с данными администратора из предыдущего шага).

Шаг 5. Установка регистрации на сайте на определенных страницах через маршрутизацию. Для этого нужно в файлах роутинга (папка проекта /routes/) задать следующие условия:
use Phphleb\Hlogin\App\System\UserRegistration as RegType; use Phphleb\Hlogin\App\OriginData as RegData;
Route::before('Hlogin\Registrar', [RegType::UNDEFINED_USER, '>='])->getGroup(); // Маршруты в этой группе будут доступны всем незарегистрированным и зарегистрированным пользователям // кроме помеченных удаленными и забаненых. Route::endGroup();
Route::before('Hlogin\Registrar', [RegType::PRIMARY_USER, '>='])->getGroup(); // Маршруты в этой группе будут доступны тем, кто прошёл предварительную регистрацию (но не подтвердил E-mail), // а также всем зарегистрированным пользователям (в том числе администраторам). Route::endGroup();
Route::before('Hlogin\Registrar', [RegType::REGISTERED_USER, '>='])->getGroup(); // Маршруты в этой группе будут доступны всем пользователям, // кто прошёл полную регистрацию (подтвердил E-mail, в том числе администраторам). Route::endGroup();
Route::before('Hlogin\Registrar', [RegType::REGISTERED_COMANDANTE, '='])->getGroup(); // Маршруты в этой группе будут доступны только администраторам. Route::endGroup();
Route::before('Hlogin\Registrar', [RegType::PRIMARY_USER, '>=', RegData::HIDE_PANELS])->getGroup(); // Маршруты в этой группе будут проходить проверку на первичную регистрацию пользователя, // но без отображения стандартных панелей регистрации и кнопок. Route::endGroup();
Route::before('Hlogin\Registrar', [RegType::REGISTERED_USER, '>=', RegData::HIDE_BUTTONS])->getGroup(); // Маршруты в этой группе будут проходить проверку на регистрацию пользователя, // но без отображения стандартных кнопок регистрации. Route::endGroup();
Следует иметь ввиду, что страницы, не попавшие ни в одну из таких групп с условиями, находятся вне правил регистрации и данная библиотека к ним не подключена.

Шаг 6. Настройка. После авторизации у администратора в профиле (/en/login/profile/) отображается кнопка входа в админпанель. В ней можно настроить панели регистрации и прочие условия.

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

Если нужно выводить данные в зависимости от типа регистрации пользователя:
use Phphleb\Hlogin\App\System\UserRegistration; $userId = UserRegistration::getUserId(); // Возвращает текущий ID пользователя или NULL если пользователь не определен или не выполнил вход.
if (UserRegistration::checkDeleted()) { /*...*/ } // Проверка на удаленного или забаненного пользователя. if (UserRegistration::checkActiveUser()) { /*...*/ } // Проверка на любого незаблокированного пользователя. if (UserRegistration::checkPrimaryAndHigher()) { /*...*/ } // Проверка на любого зарегистрированного пользователя, в том числе не подтвердившего E-mail. if (UserRegistration::checkRegisterAndHigher()) { /*...*/ } // Проверка на любого зарегистрированного пользователя, подтвердившего E-mail.
if (UserRegistration::getNumericType() === UserRegistration::REGISTERED_COMANDANTE){ /*...*/ } // Проверка на администратора сайта.
Установить принудительно дизайн панелей на странице:
<?php Phphleb\Hlogin\App\OriginData::setLocalDesign('dark');
Установить принудительно язык панелей на странице (по умолчанию язык извлекается из параметра url (следующего за доменом) или метки lang в теге <html lang='en'>):
<?php Phphleb\Hlogin\App\OriginData::setLocalLang('en');
Заменить стандартные кнопки авторизации можно на любые, предварительно отключив стандартные в админпанели. Собственным кнопкам возможно назначить одно из следующих действий:
<script> // Установка дизайна для страницы через JS. // Например, так можно задать тип `special` для слабовидящих пользователей без обновления страницы в браузере. hloginSetDesignToPopups('special');
// Возвращает тип дизайна в исходное состояние. hloginRevertDesignToPopups();
// Закрыть все окна регистрации. hloginCloseAllPopups();
// Открытие определенного окна, в данном случае регистрации пользователя. hloginVariableOpenPopup('UserRegister'); // Или 'UserEnter', 'UserProfile', 'ContactMessage'
// Выводит произвольное пользовательское сообщение в окне (дизайн текущий). hloginOpenMessage('Title', 'Message text', 'OK');
// Выводит собственные блоки 'input' и 'button' в окне (дизайн текущий). hloginOpenMessage('Title', hloginPopupInput('Main field', 'backend-data-checker') + hloginPopupButton('Button name', 'alert(1)'));
// Если эта функция существует, то будет вызвана при каждом открытии окна с передачей типа окна. function _hloginMainVariableFunction(popupType) { // Пользовательский код. (popupType = 'UserRegister' / 'UserEnter' / 'UserPassword' / 'ContactMessage') } </script>
Например (ссылка на демо):
<?php use Phphleb\Hlogin\App\System\UserRegistration; if (UserRegistration::checkPrimaryAndHigher()) { print '<button onclick="hloginVariableOpenPopup(\'UserProfile\')">Открыть панель профиля пользователя</button>'; } else { print '<button onclick="hloginVariableOpenPopup(\'UserRegister\')">Открыть панель регистрации</button>'; print '<button onclick="hloginVariableOpenPopup(\'UserEnter\')">Открыть панель входа</button>'; } print '<button onclick="hloginVariableOpenPopup(\'ContactMessage\')">Открыть панель отправки сообщения</button>'; print '<button onclick="hloginSetDesignToPopups(\'special\')">Версия для слабовидящих</button>'; print '<button onclick="hloginRevertDesignToPopups()">Отменить изменение версии</button>';
Или, при помощи атрибутов:
<?php use Phphleb\Hlogin\App\System\UserRegistration; if (UserRegistration::checkPrimaryAndHigher()) { print '<button class="hlogin=variable-open-popup" data-type="UserProfile">Open user profile panel</button>'; } else { print '<button class="hlogin=variable-open-popup" data-type="UserRegister">Open registration panel</button>'; print '<button class="hlogin=variable-open-popup" data-type="UserEnter">Open login panel</button>'; } print '<button class="hlogin=variable-open-popup" data-type="ContactMessage">Open the message sending panel</button>'; print '<button class="hlogin=set-design-to-popups" data-design="special">Version for the visually impaired</button>'; print '<button class="hlogin=revert-design-to-popups">Undo version change</button>';
Как можно понять, регистрация не может быть доступна для пользователей с отключенным javascript в браузере. Сейчас таких почти не осталось.

Если необходимо направить пользователя сразу на страницу входа или регистрации, то необходимых страниц автоматически создается несколько:

Страница регистрации
/en/login/action/registration/

Страница входа
/en/login/action/enter/

Страница профиля
/en/login/profile/

Страница обратной связи
/en/login/action/contact/

Страница автоматического выхода
/en/login/action/exit/

Страница админпанели с настройками регистрации
/en/adminzone/registration/settings/

Страница админпанели со списком пользователей
/en/adminzone/registration/users/

Страница админпанели для управления пользовательскими данными
/en/adminzone/registration/rights/


При валидации значений на стороне бекенда, посылаемых из форм регистрации, также можно дополнительно обработать их собственным PHP-скриптом, при его наличии. Таким образом можно, например, добавить собственное поле в форму и проверить его самостоятельно.
// Файл /app/Optional/MainHloginExplorer.php namespace App\Optional; class MainHloginExplorer { /** * @return bool **/ public function check() { return true; // Проверка собственных условий валидации. }
/** * @param string|false $value - значение промокода. * @param int $userId - идентификатор пользователя (полученный после регистрации), для которого пришло значение. **/ public function setPromocode($value, $userId) { // Обработка промокода, если такая опция выбрана в админзоне } }

Дизайн

Собственный дизайн доступен при выборе типа `blank` в админпанели. После этого можно скопировать и изменить файл CSS любого другого дизайна из существующих, подключив его к сайту самостоятельно. Также можно внести правки по типу дизайна.
.hlogin-wn[data-type='base'] input { /* Правила CSS для блока "input" дизайна "base" */ } .hlogin-wn[data-type='dark'] input { /* Правила CSS для блока "input" дизайна "dark" */ }


Локализация

Для создания собственной локализации нужно создать папку в проекте, скопировать туда исходные файлы, например для английского это будут файлы `en.php` и `hlogin-lang-en.js` после чего указать путь до папки в двух константах конфигурационного файла, без констант используются значения по умолчанию. Эти файлы будут использоваться вместо стандартных переводов, в том числе для писем.

// File /start.hleb.php
/*
|-----------------------------------------------------------------------------
| Sets a custom path for a folder with frontend localization.
|
| Устанавливает собственный путь для папки с фронтенд локализацией.
|
*/
define('HLOGIN_LOCALIZE_FRONTEND_DIR', '/vendor/phphleb/hlogin/resource/all/js/');
/*
|-----------------------------------------------------------------------------
| Sets a custom path for a folder with backend localization.
|
| Устанавливает собственный путь для папки с бэкенд-локализацией.
|
*/
define('HLOGIN_LOCALIZE_BACKEND_DIR', '/vendor/phphleb/hlogin/App/Langs/');

Админзона

При создании собственных дополнительных страниц в панели администратора, окружите их маршруты ограничением доступа, как показано далее:
use Phphleb\Hlogin\App\System\UserRegistration as RegType; Route::before('Hlogin\Registrar', [RegType::REGISTERED_COMANDANTE, '='])->getGroup(); // Маршруты в этой группе будут доступны только администраторам. Route::endGroup();
Создание страниц в разделе администратора описано в библиотеке github.com/phphleb/adminpan.

Рассылка писем

Отправка писем с уведомлениями и восстановлением доступа осуществляется при помощи библиотеки github.com/phphleb/muller. В админпанели указывается E-mail отправителя, для которого должна быть разрешена отправка с сервера, для большинства хостингов достаточно создать такой почтовый ящик.
Доступный E-mail отправки находится в php.ini (sendmail_path = ... -f'email@example.com').

По умолчанию письма дополнительно логируются в папку `/storage/logs/` c окончанием `mail.log` в названии файла.

Индивидуальная реализация отправки писем

// File /app/Optional/HloginMailServer.php namespace App\Optional; use Phphleb\Muller\Src\DefaultMail; class HloginMailServer extends DefaultMail { /** * @inheritDoc **/ public function send() { /* ... */ return true; } {


Обновление

При обновлении версии библиотеки настоятельно рекомендуется произвести следующие действия, заново назначив дизайн и обновив автозагрузчик. Создавать таблицы и администратора при обновлении не нужно.
$ composer update phphleb/hlogin $ php console phphleb/hlogin --add $ composer dump-autoload

Ссылки

Библиотека HLOGIN на GITHUB: github.com/phphleb/hlogin

Демонстрационная страница с регистрацией: auth.phphleb.ru


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



Группа поддержки в Телеграм - @phphleb

Задать вопрос в блоге, который сделан с использованием фреймворка HLEB.

Этот сайт-инструкция к фреймворку HLEB сделан с использованием фреймворка HLEB.

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