IO v7. Что изменилось в 7 версии
Изменения, в отличие от 6 версии
- Прекращена поддержка базы данных MongoDB. Осталась только MySQL и она стала основной базой данных для проекта.
- Переход на PHP 8.5.
- Class (классы) теперь наследуются от класса
IO\MySQL_Class. Именование файлов также изменилось. Файл должен начинаться с большой буквы и иметь постфикс.php(пример:Example.php). Имя класса должно быть таким же, как и название файла, без формата файла.php(пример:Example). - Model (модели) переименованы в Api. Поддержка обращения к моделям фреймворка ниже 7 версии осталась. Причем обращаться можно как с ключевым словом
model, так и с новымapi(пример:app.model.user.getDataиapp.api.user.getDataравнозначны). Именование файлов также изменилось. Файл должен начинаться с большой буквы и иметь постфиксApi.php(пример:ExampleApi.php). Имя класса должно быть таким же, как и название файла, без формата файла.php(пример:ExampleApi). Наследование теперь происходит от классаIO\Api\CoreApi, но также класс может не наследоваться ни от какого класса (если в этом есть необходимость). Изменена переменная$resultвdoфункциях, возвращение результата в моделях происходит другим способом. Функцияrcp_rules()переименована вrules(). Функцииparams(),getParams(),event()удалены. Добавлены функцииshow_error(),show_success(),permission(),permissions(),onBefore(),onAfter(). Связывание модели с классом теперь происходит в функцииstruct(). В модели прописывать путь к самой себе теперь не нужно. - Controller (контроллеры) переименованы в Route (маршруты). Именование файлов также изменилось. Файл должен начинаться с большой буквы и иметь постфикс
Route.php(пример:ExampleRoute.php). Имя класса должно быть таким же, как и название файла, без формата файла.php(пример:ExampleRoute). Наследование теперь происходит от классаIO\Route. Класс маршрута по умолчанию сталDefaultRouteвместо старогоMainController. Добавлена функцияroutes()для регистрации маршрутов класса. Рендер twig шаблонов теперь происходит через функцию$this->render(). ФункцииsetLayout(),renderPlain(),render()удалены. Добавлена функцияactionPageNotFound(), хотя ее нужно объявлять самостоятельно в каждом проекте.actionфункции перестали быть статичными. Стандартное использование layout view удалено. - Автоматическая генерация и регистрация маршрутов была удалена. Теперь маршруты нужно регистрировать самостоятельно, но уже под любым именем и путем. Причем регистрировать нужно как сами маршруты, так и классы маршрутов. Маршруты регистрируются в классе маршрута, а классы маршрутов регистрируются в файле настроек модуля. При регистрации маршрутов можно использовать regexp выражения.
- Классы, от которых наследуются
Class,Api,Routeбыли созданы на основе файлов из 6 версии фреймворка и были значительно переписаны. - Views (вьюшки) переименованы в Templates (шаблоны). Формат twig шаблонов изменен на
*.twig. Обращение к template файлам теперь не через "точку" как в "общалке", а через "слэш". - Cron-скрипты теперь наследуются от класса
IO\CronTemplate. Именование файлов также изменилось. Файл должен начинаться с большой буквы и иметь постфиксCron.php(пример:ExampleCron.php). Имя класса должно быть таким же, как и название файла, без формата файла.php(пример:ExampleCron). - У классов функция
dbsearch2()была заменена наsearch(). - Функция
xarr()была модернизирована. Из нее убрана поддержка извлечения букв из срок. Удалена функцияxarrj()(так как теперьxarr()выполняет ее функции). - Базовый класс
IOSessionбыл изменен. Удалены устаревшие функции. Удалена переменнаяuser, вместо нее добавлены функции получения данных пользователя. - Добавлена поддержка модулей.
- Фреймворк выделен как отдельный модуль, но он обязательный.
- Backend и Frontend были отделены путем использования Vue 3 и vue-router. Хотя первоначально страница рендерится через index.php шаблонизатором Twig, но дальше по умолчанию управление отдается vue-router. При необходимости через маршруты можно организовать рендеринг требуемых маршрутов без использования Vue 3, а через шаблонизатор Twig.
- В связи с добавлением модулей, поддержки vue 3 и vue-router, был сильно изменен процесс разработки.
- ...
Актуальные проблемы
- Все еще не изменен сервис авторизации на использование JWT без cookie, что должно позволить создавать открытое API.
- Множество привычных базовых функций из 6 версии фреймворка все еще не перенесены.
- Не все базовые константы перенесены из 6 версии фреймворка.
- Capsule из
laravel/symfonyдля удобства конструирования SQL запросов не перенесен. - Отсутствует поддержка словарей фраз.
- Отсутствует поддержка глобальной переменной
$ioEnum. - Отсутствует поддержка глобальной переменной
$ioLangs. - Отсутствует поддержка глобальной переменной
$purifier. - Поддержка параметра
~и!~в функцииgetWhereFromFilter()классаIO_MYSQL_PDOпод сомнением, нужно протестировать.