Перейти к содержимому

Начало работы с XMF

2.5.x ✅ 4.0.x ✅

Это руководство охватывает фундаментальные концепции фреймворка модулей XOOPS (XMF) и как начать его использовать в ваших модулях.

  • XOOPS 2.5.8 или позже установлен
  • PHP 7.2 или позже
  • Базовое понимание объектно-ориентированного программирования PHP

XMF использует PHP пространства имен для организации своих классов и избежания конфликтов имен. Все классы XMF находятся в пространстве имен Xmf.

Без пространств имен все PHP классы делят глобальное пространство. Это может привести к конфликтам:

<?php
// Это будет конфликтовать с встроенным ArrayObject PHP
class ArrayObject {
public function doStuff() {
// ...
}
}
// Фатальная ошибка: Cannot redeclare class ArrayObject

Пространства имен создают изолированные контексты именования:

<?php
namespace MyNamespace;
class ArrayObject {
public function doStuff() {
// ...
}
}
// Нет конфликта - это \MyNamespace\ArrayObject

Вы можете ссылаться на классы XMF несколькими способами:

Полный путь пространства имен:

$helper = \Xmf\Module\Helper::getHelper('mymodule');

С оператором use:

use Xmf\Module\Helper;
$helper = Helper::getHelper('mymodule');

Множественные импорты:

use Xmf\Request;
use Xmf\Module\Helper;
use Xmf\Module\Helper\Permission;
$input = Request::getString('input', '');
$helper = Helper::getHelper('mymodule');
$perm = new Permission();

Одна из самых больших удобств XMF - автоматическая загрузка классов. Вам никогда не нужно вручную включать файлы классов XMF.

Старый способ требовал явной загрузки:

XoopsLoad('xoopsrequest');
$cleanInput = XoopsRequest::getString('input', '');

С XMF классы загружаются автоматически при упоминании:

$input = Xmf\Request::getString('input', '');

Или с оператором use:

use Xmf\Request;
$input = Request::getString('input', '');
$id = Request::getInt('id', 0);
$op = Request::getCmd('op', 'display');

Автозагрузчик следует стандарту PSR-4 и также управляет зависимостями, на которые полагается XMF.

use Xmf\Request;
// Получить целочисленное значение с значением по умолчанию 0
$id = Request::getInt('id', 0);
// Получить строковое значение с пустой строкой по умолчанию
$title = Request::getString('title', '');
// Получить команду (буквенно-цифровая, нижний регистр)
$op = Request::getCmd('op', 'list');
// Получить электронную почту с валидацией
$email = Request::getEmail('email', '');
// Получить из конкретного хэша (POST, GET и т.д.)
$formData = Request::getString('data', '', 'POST');
use Xmf\Module\Helper;
// Получить помощника для вашего модуля
$helper = Helper::getHelper('mymodule');
// Прочитать конфигурацию модуля
$itemsPerPage = $helper->getConfig('items_per_page', 10);
$enableFeature = $helper->getConfig('enable_feature', false);
// Доступ к объекту модуля
$module = $helper->getModule();
$version = $module->getVar('version');
// Получить обработчик
$itemHandler = $helper->getHandler('items');
// Загрузить файл языка
$helper->loadLanguage('admin');
// Проверить, если текущий модуль
if ($helper->isCurrentModule()) {
// Мы находимся в страницах этого модуля
}
// Проверить права администратора
if ($helper->isUserAdmin()) {
// У пользователя есть доступ администратора
}
use Xmf\Module\Helper;
$helper = Helper::getHelper('mymodule');
// Получить URL модуля
$moduleUrl = $helper->url('images/logo.png');
// Возвращает: https://example.com/modules/mymodule/images/logo.png
// Получить путь модуля
$modulePath = $helper->path('templates/view.tpl');
// Возвращает: /var/www/html/modules/mymodule/templates/view.tpl
// Пути загрузки
$uploadUrl = $helper->uploadUrl('files/document.pdf');
$uploadPath = $helper->uploadPath('files/document.pdf');

XMF предоставляет полезные инструменты отладки:

// Дамп переменной с красивым форматированием
\Xmf\Debug::dump($myVariable);
// Дамп нескольких переменных
\Xmf\Debug::dump($var1, $var2, $var3);
// Дамп данных POST
\Xmf\Debug::dump($_POST);
// Показать трассу стека
\Xmf\Debug::backtrace();

Вывод отладки сворачиваемый и отображает объекты и массивы в легко читаемом формате.

При построении модулей на основе XMF организуйте ваш код:

mymodule/
admin/
index.php
menu.php
class/
Helper.php # Опциональный пользовательский помощник
ItemHandler.php # Ваши обработчики
include/
common.php
language/
english/
main.php
admin.php
modinfo.php
templates/
mymodule_index.tpl
index.php
xoops_version.php

Типичная точка входа модуля:

mymodule/index.php
<?php
use Xmf\Request;
use Xmf\Module\Helper;
require_once dirname(dirname(__DIR__)) . '/mainfile.php';
$helper = Helper::getHelper(basename(__DIR__));
// Получить операцию из запроса
$op = Request::getCmd('op', 'list');
$id = Request::getInt('id', 0);
// Включить заголовок XOOPS
require_once XOOPS_ROOT_PATH . '/header.php';
// Логика вашего модуля здесь
switch ($op) {
case 'view':
// Обработать просмотр
break;
case 'list':
default:
// Обработать список
break;
}
// Включить подвал XOOPS
require_once XOOPS_ROOT_PATH . '/footer.php';

Теперь, когда вы поняли основы, исследуйте:

  • XMF-Request - Детальная документация обработки запросов
  • XMF-Module-Helper - Полный справочник помощника модулей
  • ../Recipes/Permission-Helper - Управление разрешениями пользователей
  • ../Recipes/Module-Admin-Pages - Построение административных интерфейсов
  • ../XMF-Framework - Обзор фреймворка
  • ../Reference/JWT - Поддержка JSON Web Token
  • ../Reference/Database - Утилиты базы данных

#xmf #getting-started #namespaces #autoloading #basics