Полное руководство для новичков по разработке и использованию хуков, плагинов, шапок и CSRF-защиты (PHP-сторона) 1. Введение Данное руководство предназначено для разработчиков, которые хотят расширить систему через создание плагинов, работу с хуками и использование механизмов безопасности, таких как CSRF-защита. Здесь подробно рассматриваются основные концепции и шаги, которые помогут новичкам эффективно работать с системой на **PHP-стороне**. 2. Хуки **Хуки** (hooks) позволяют вставлять или изменять поведение системы без изменения её исходного кода. Это механизм расширения функционала системы, с помощью которого можно добавлять или изменять логику на разных этапах выполнения программы. ### Типы хуков - **before_** — хук, который вызывается до какого-либо действия (например, до обработки формы). - **after_** — хук, который вызывается после выполнения действия (например, после сохранения данных). - **custom_** — произвольные хуки, которые могут быть созданы пользователем для добавления своей логики. Пример использования хука на PHP: ```php // Регистрация хука use App\Core\Hook; Hook::register('before_user_login', function($user) { echo "Пользователь {$user->name} пытается войти..."; }); // Вызов хука в другом месте Hook::fire('before_user_login', $user); ``` ### Важные методы: - **register(string $event, callable $callback)** — регистрирует обработчик для события. - **fire(string $event, array $context)** — вызывает все обработчики для события с передачей данных. 3. Создание плагинов **Плагины** — это способы расширения функционала системы с использованием хуков. Плагины могут быть легко интегрированы в систему, подключая свою логику и изменяя поведение приложения. ### Структура плагина: 1. **plugin.json** — метаданные плагина (название, описание, версии). 2. **Папка с логикой плагина** — контроллеры, хуки, маршруты. 3. **hooks.php** — регистрация хуков. ### Пример структуры плагина: ``` /plugins /my-plugin plugin.json MyPlugin.php hooks.php routes.php ``` ### Пример манифеста плагина (plugin.json): ```json { "name": "My Plugin", "description": "Описание плагина", "version": "1.0", "author": "Your Name", "hooks": [ "before_user_login", "after_user_login" ] } ``` ### Реализация плагина (MyPlugin.php): ```php namespace App\Plugins\MyPlugin; use App\Core\Hook; class MyPlugin { public function init() { // Добавление хука для события "перед логином пользователя" Hook::register('before_user_login', function($user) { echo "Плагин: Пользователь {$user->name} пытается войти..."; }); } } ``` ### Подключение плагина: Чтобы подключить плагин, создаём его экземпляр и инициализируем его. ```php use App\Plugins\MyPlugin\MyPlugin; $plugin = new MyPlugin(); $plugin->init(); ``` 4. Вывод данных в шапке Чтобы вывести данные из модуля или плагина в шапке сайта, можно использовать **хуки** для внедрения контента в нужное место в шаблоне. ### Регистрация хука для вывода данных в шапке: ```php use App\Core\Hook; Hook::register('display_header', function() { echo '