1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yurunsoft-IMI

03.03.2025 16:46
GitLife Service Account

Эта версия обновлена не только благодаря ежедневному исправлению ошибок, но также включает улучшение производительности базовых операций с данными, а также добавление новых валидаторов, HTTP-валидаторов и перечней значений.

Валидатор

// Из-за ограничений по объему приведены только некоторые примеры валидации, полный список доступен в документации
@Decimal(min=-0.01, max=999.99, accuracy=2, message="Дробное число должно быть больше либо равно {-0.01}, меньше либо равно {999.99}. Допустимое количество знаков после запятой - {2}. Текущее значение: {:value}")

Перечень значений

<?php
namespace ImiDemo\HttpDemo\MainServer\Enum;

use Imi\Enum\BaseEnum;
use Imi\Enum\Annotation\EnumItem;

class Status extends BaseEnum
{
    /**
     * @EnumItem("Correct")
     */
    const YES = 1;

    /**
     * @EnumItem("Incorrect")
     */
    const NO = 0;
}

// Пример использования:
// Получение значения константы по имени
Status::getValue('YES');

// Получение текстового описания по значению
Status::getText(Status::YES);

// Получение объекта аннотации EnumItem по значению
Status::getData(Status::YES);

// Получение всех имён констант в перечне
Status::getNames();

// Получение всех значений констант в перечне
Status::getValues();

Журнал обновлений:

Новое

Улучшения

  • Расширено пространство имен для сканирования аннотаций
  • Улучшены сообщения об ошибках при выполнении buildRuntime
  • Оптимизация отображения ошибок при холодном старте и горячем перезапуске
  • Изменен порядок инициализации объектов BeanFactory: __construct -> injectProps -> __init
  • Добавлена поддержка кэширования запросов SQL для улучшения производительности
  • Улучшена обработка ошибок при выполнении запросов к базе данных
  • Метод AroundJoinPoint->proceed() теперь принимает параметры

Исправления

  • Исправлено проблемное поведение IMI.MAIN_SERVER.WORKER.START.APP, которое выполнялось только один раз
  • Исправлено неправильное определение мест локальных ошибок
  • Исправлено неверное подсчет количество элементов пула
  • Исправлены проблемы с внедрением свойств
  • Исправлено отсутствие применения изменений аннотаций при горячем перезапуске
  • Исправлены проблемы с внедрением некоторых классов
  • Исправлено исключение "MySQL server has gone away" при использовании PDO и MySQL с истекшим временем ответа сервера
Последнее сообщение коммита: 更新README.md
03.03.2025 16:45
GitLife Service Account

Содержание может содержать违规信息

Поскольку в данном случае есть только одно предложение на китайском языке, которое требуется перевести на русский язык, то результат будет следующим:

Содержание может содержать незаконную информацию.

Последнее сообщение коммита: 更新README.md
03.03.2025 16:45
GitLife Service Account

Новое

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

В конце имени пула соединений добавляется .slave, что указывает на использование реплики; этот параметр необязательный; если он указан, то по умолчанию запросы выполняются через реплику, а изменения — через основной сервер; в рамках транзакций все операции выполняются через основной сервер.

  • Добавлены события до и после парсинга данных модели (BeforeParseData, AfterParseData).

  • Добавлен интерфейс прослушивания события ModelEvents::AFTER_QUERY.

  • Добавлена поддержка аннотации ExtractProperty для выделения свойств полей в текущую модель.

  • Добавлены аннотации конфигурации сериализации моделей (Serializable, Serializables).

  • Добавлена поддержка аннотации Transaction для установки типа транзакции и необходимости автоматической отправки.

Transaction(autoCommit="Автоматическая отправка транзакции true/false, по умолчанию true")

Типы транзакций:

Транзакция с вложением (по умолчанию)

Transaction(type=TransactionType::NESTING)

Метод должен вызываться внутри транзакции

Transaction(type=TransactionType::REQUIREMENT)

Если нет открытой транзакции, она будет открыта

Transaction(type=TransactionType::AUTO)
  • Добавлена поддержка команд scan, object, sort, migrate, hscan, sscan, zscan для использования Swoole Redis.

  • Добавлен вывод информации о системе, PHP, Swoole и часовых поясах при запуске.

  • Добавлен вывод количества рабочих процессов при запуске сервиса.

Улучшения

  • Изменены CLASS, get_called_class() на объектно-ориентированный стиль.

  • Поддержка передачи параметров по ссылке в EventParam.

  • Поддержка изменения модели в событии ModelEvents::AFTER_FIND.

  • Добавлено обработки ошибок при использовании аннотации Transaction.

  • Добавлено откатывание транзакций при закрытии соединений.

  • При использовании аннотации Transaction в модели, если имя пула соединений не указано, используется имя пула соединений модели.

  • Добавлено значение, возвращаемое методом open ресурса базы данных.

  • Улучшено обнаружение ошибок в Db.

  • Изменён и улучшен пул соединений, теперь выбрасывается исключение при неудачном получении ресурса.

  • Изменён формат представления SQL информации.

  • Добавлены интерфейсы IHashCode и THashCode для хранения ресурсов пула соединений.

  • Изменены названия атрибутов класса EventParam для снижения вероятности конфликта.

  • Изменены правила названий ключей Redis (контекст соединения, группировка соединений, Session).

  • Изменено хранение контекста соединения в виде HASH.

  • Изменено хранение группировки соединений в виде SET.

Исправление ошибок

  • Исправлены проблемы вызова событий в неконстантных методах модели.

  • Исправлены проблемы вызова метода query() в неконстантных методах модели.

  • Исправлены проблемы удаления связанных записей при обновлении модели.

  • Исправлены проблемы сериализации модели.

  • Исправлены проблемы использования метода IEvent с static.

  • Исправлены потенциальные проблемы с возвратом значений по ссылке.

Неразрывные изменения

  • Изменены названия событий статических методов модели.

Было: Имя_класса_Имя_события, стало: Имя_класса:Имя_события

  • Исправлено поведение метода join по умолчанию, теперь это INNER JOIN.
Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:44
GitLife Service Account

В связи с приближающимся Днем осеннего освещения imi продолжает развиваться, и было решено повысить версию до v0.1.x от v0.0.x, всё ещё находясь в стадии активной разработки.

Желаем всем приятного отдыха!~

Новые возможности

  • Поддержка полиморфизма моделей один-к-одному, один-ко-многим и многие-ко-многим

  • Поддержка позднего запроса связанных моделей

  • Введение использования @AutoSelect(alwaysShow=false), что позволяет скрывать поля после сериализации, которые не были автоматически запрошены

Улучшения

  • Форматирование кода, замена табуляции пробелами

  • Использование более элегантного способа реализации события IMI.APP.INIT

  • Улучшение сообщений генератора моделей о создании, перезаписи и пропуске

Исправлено

  • Исправление проблемы valid()

  • Исправление ошибочного определения пути горячей перезагрузки в некоторых случаях

Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:44
GitLife Service Account

Новое:

  • Добавлена поддержка моделей отношений один-к-одному, один-ко-многим, многие-ко-многим (CRUD)

  • Добавлена поддержка корутин Redis с отложенным получением пакетов

  • Добавлена поддержка корутин MySQL с отложенным получением пакетов

  • Добавлен вывод иконки imi при запуске инструмента

  • Добавлено событие инициализации проекта (до выполнения которого запросы не будут обрабатываться)

  • Добавлена поддержка методов setData, setField, setFieldExp, setFieldInc, setFieldDec в Query для баз данных

Улучшения:

  • Улучшение части кода

  • Дополнение методов интерфейса IQuery

Исправления:

  • Исправление ошибки возврата значения при использовании контейнерной инициализации класса (не поддерживаются ссылочные возвращаемые значения, исправлена только ошибка)

  • Исправление получения загруженных файлов без имени поля формы

  • Изменение типа возвращаемого значения в комментариях метода getUploadedFiles для поддержки подсказок IDE

  • Исправление типа $server в ITaskHandler

Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:44
GitLife Service Account

Основной поддержкой стала модель Phar; после тестирования было замечено значительное увеличение скорости запуска при использовании сетевых монтированных дисков, а также небольшое повышение скорости запуска с локальных жестких дисков.

Новые возможности:

  • Добавлена поддержка Phar

  • Добавлена возможность определения виртуальных полей моделей, не участвующих в операциях с базой данных

  • Добавлены события до и после выполнения запросов модели

  • Добавлены события до и после инициализации проекта и компонентов при старте

  • Добавлены события до и после инициализации Worker процесса

  • Добавлены методы App::setLoader() и App::getLoader()

Улучшения:

  • Изменены названия, улучшены комментарии

  • Изменено отображение ошибок командной строки, теперь можно просматривать трассировки ошибок

  • Добавлено проверение и сообщение об отсутствии пространства имён проекта

  • Добавлено проверение успешного начала транзакций в Coroutine MySQL

  • Добавлено проверение перед откатом транзакции с помощью аннотации @Transaction

  • Изменён тип возвращаемого значения метода getResource() пула соединений

  • Изменено название конфигурации сервера с server_xxx на server.xxx

  • Создана обёртка Tool класса, детали запуска инструмента помещены внутрь Tool класса

  • Улучшена точность определения пути директорий методом Imi::getNamespacePath()

  • Удалена зависимость метода ModelManager::getFields() от RequestContext

Исправления:

  • Исправлен баг бесконечного перезапуска при активированном состоянии 'status' => false

  • Исправлен баг обработки протокола protocol:// в методе File::path()

  • Исправлены ошибки в инструментальном классе

Отмененные возможности:

  • Отменено использование конфигурации сервера server_xxx, заменено на server.xxx
Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:43
GitLife Service Account

Добавлено:

  • Поддержка адаптации Swoole 4.1.0 для однокнопочного перехода в корутины

  • Добавлена поддержка пула процессов

  • При создании модели, если директория отсутствует, она автоматически создаётся

  • Добавлен метод ProcessManager::runWithManager, который можно использовать в событии IMI.SERVERS.CREATE.AFTER

  • Добавлены методы Result->getSql() и Result->getStatement()

  • При инициализации Manager, Worker, Process процессов заново сеян случайные числа

  • Для метода CoroutineChannelManager::pop() добавлен параметр $timeout

  • Добавлена возможность инициализировать пул соединений при запуске пользовательского процесса

  • Добавлена поддержка ограничения одного экземпляра процесса с помощью блокировки файла

Улучшено:

  • Улучшены логика инициализации ConnectContext и Group Redis

  • Горячее обновление процессов теперь привязывается к процессу Manager

  • Улучшен генератор моделей, по умолчанию первый поле является первичным ключом

  • Совместимость пула с Swoole 4.0.3 и выше

  • Улучшена точность отслеживания ошибок

  • Обработка полей типа bit базы данных как bool

  • Улучшена логика проверки null значений при сохранении модели

  • Изменён обработчик события WorkerStart

  • Изменён обработчик кэширования каталогов файлов перечислений и классов

  • Улучшена поддержка двух названий полей при обновлении модели

  • Улучшена конвертация данных в массив перед обновлением модели

  • Улучшена логика обработки аргументов при инициализации класса через BeanFactory

  • Изменён текст запуска горячего обновления процессов

  • Изменение: сканирование проектных классов в событии IMI.INITED, горячий перезапуск действителен только для серверных классов

  • Внедрена функциональность получения командной строки imi

  • Улучшение Result->get(), Result->getArray() возвращают null, когда данные отсутствуют

  • Добавлены сообщения о начале горячего обновления процессов

  • Внедрены методы кэширования класса Bean

Исправлено:

  • Исправлено возможное прекращение работы горячего обновления при использовании Swoole ≤ 4.0.4

  • Исправлена проблема конфигурации подключения к базе данных, использование username для указания имени пользователя

  • Исправлено событие ManagerStop, которое может не вызываться

  • Исправлен метод CoroutineChannelManager::stats()

  • Исправлено чтение Redis хранилища ConnectContext

  • Исправлен баг генератора моделей nullable

  • Исправлено отсутствие импорта пространства имен

  • Исправлены проблемы модели с условием where

  • Исправлены проблемы класса kv-хранения

  • Исправлены ошибки инициализации кэша

  • Исправлены проблемы с полями, не относящимися к модели

Отменено:

  • Отменена автоматическая запись журнала, теперь журналы отправляются в реальном времени в обработчик

  • Отменено поле lastTrace в журнале
    Добавлена поддержка {errorFile}, {errorLine}

Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:42
GitLife Service Account

RT, практическая работа продолжается, IMI будет становиться всё лучше!

  • Добавлен метод TcpController->encodeMessage()

  • Добавлена информация о запуске сервера

  • Добавлено определение имени командной строки

  • Добавлено событие IMI.MAIN_SERVER.WORKER.START.APP

  • Добавлена поддержка атрибутов после генерации модели для подсказок IDE

  • Добавлены события CRUD для моделей

  • Добавлен метод set модели, поддерживающий присвоение значений из массива

  • Добавлен обработчик HTTP 404

  • Добавлена поддержка автоматических транзакций

  • Добавлена поддержка проверки isset для свойств модели

  • Улучшено отображение прогресса генерации модели и завершение сообщений

  • Исправлена проблема горячего перезапуска сервера при использовании опции -appNamespace

  • Исправлена ошибка местоположения файла журнала ошибок

  • Исправлены проблемы с методом save модели

  • Изменён файл записи PID процесса

  • Оптимизация поддержки логирования сервера

  • Изменено очистка кэша Beans текущего worker процесса

  • Исправлены проблемы использования корутин в командной строке

  • Продолжена работа над исправлением проблем загрузки аннотаций проекта

  • Удалена загрузка аннотаций проекта при старте, теперь они загружаются в инструментах

  • Исправлены проблемы удаления кэшированных Beans

  • Исправлены проблемы с методом Model::select(), вызывающие ошибки при отсутствии условий

  • Исправлены проблемы загрузки аннотаций проекта при старте

  • Улучшены механизмы захвата ошибок и исключений

  • Исправлены проблемы, препятствующие распространению событий, что могло бы привести к отказу одного компонента

  • Теперь Logger использует единую операцию App::getBean()

  • Изменено поведение JsonErrorHandler по умолчанию для выбрасывания исключений

  • Сохранение журналов критических ошибок

  • Добавлены процессы обработки журналов ошибок и исключений

  • Исправлены проблемы с небольшим значением $context в журнале

  • Исправлены проблемы последнего трассировки журнала

  • Исправлены проблемы выполнения запросов до полной инициализации корутин в WorkerStart

  • Исправлены проблемы последней трассировки журнала

  • Изменено описание версии PSR проекта в composer.json

  • Исправлены проблемы с отложенным обработкой пакетов

  • Исправлены проблемы обработки необъектных данных KVStorage

  • Исправлены проблемы с конфигурацией middleware в маршрутах HTTP

Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:42
GitLife Service Account
  • Добавлена поддержка создания WebSocket/TCP/UDP приложений с использованием middleware + контроллеров

  • Добавлена поддержка долгоживущих данных соединений

  • Добавлен метод получения общего количества соединений в группе

  • Добавлен атрибут redisDb для указания базы данных в Redis группе

  • Добавлено слушание события WorkerError

  • Открыт доступ к некоторым методам BeanProxy

  • Поддержка генерации моделей с представлениями

  • В классе сервера imi добавлен метод getSwoolePort()

  • Улучшены поля и методы модели, добавлены аннотации полей базы данных для лучшего понимания

  • Оптимизированы операции update/delete/save модели базы данных, теперь при отсутствии первичного ключа могут возникнуть исключения

  • Переименовано work в worker

  • Улучшено управление транзакциями Redis

  • Логирование данных соединений и данных сердцебиения Redis используется в рамках транзакций для защиты от крайних случаев

  • Добавлен параметр $reactorID в событие закрытия сервера close

  • Выделен метод получения ID процесса в утилиты

  • Исправлена проблема с префиксами при генерации моделей

  • Исправлены ошибки обработки условий IN и NOT IN запросами базы данных

  • Исправлена проблема очистки кэша класса Bean

Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:42
GitLife Service Account
  • Добавлена поддержка использования контроллеров для разработки WebSocket-сервисов

  • Добавлена поддержка группировки логики соединений WebSocket

  • Добавлен механизм кэширования маршрутов HTTP

  • Теперь метод Session::get() без передачи аргументов возвращает все данные

  • Добавлена реализация сериализации и десериализации встроенных сессий PHP

  • Поддерживается форма параметра a.b.c в сессиях, где Session::get('a.b.c') эквивалентна Session::get('a')['b']['c']

  • Добавлена поддержка префикса сессии

  • Добавлена возможность использовать PoolManager::use() вне контекста запроса RequestContext

  • Изменено создание контейнера в RequestContext на требуемое время

  • По умолчанию timeout для синхронизации Redis подключения изменён на 68 лет (абсолютно достаточно! flag!)

  • Исправлена проблема отсутствия значения по умолчанию для параметров AtomicManager::sub()

  • Исправлена проблема ошибочного доступа к сессии при параллельном использовании

  • Исправлены проблемы LazyArrayObject

  • Исправлена ошибка местоположения установки имени процесса

  • Исправлено правописание одного метода

  • Устранены возможные повторения имён переменных в BeanFactory

  • Оптимизирована логика выполнения recv() для задержки получения данных

  • Обновлены и оптимизированы события сервера

  • Изменено использование eval() на include для кэшированных файлов при создании экземпляров класса Bean

Последнее сообщение коммита: Merge branch 'dev'
03.03.2025 16:41
GitLife Service Account

Регулярное обновление, празднуем выход на биржу Xiaomi! imi: люби ми, мой ми

  • Добавлена возможность автоматического восстановления соединения при отключении пулов ресурсов

  • Добавлена поддержка модели $model->propertyName для чтения и записи

  • Реализован локальный аннотированный middleware с конфигурацией

  • Добавлена возможность горячего перезапуска с очисткой кэша APC и Opcache

  • Добавлен атрибут baseDir в аннотацию @View для установки базового пути

  • В классе ServerRequest добавлены значения по умолчанию для свойств

  • Добавлены стандартные порты протоколов в методах Uri

  • При запуске сервера удаляются ненужные объекты

  • Исправлены ошибки, связанные с моделями

  • Исправлена ошибка запуска процесса

  • Исправлена обработка заголовков PSR-7

  • Изменено время вызова конструктора при создании экземпляров BeanFactory

  • Исправлена проблема с дефолтными значениями при создании экземпляров

  • Исправлены ошибки преобразования Uri в строку

  • Исправлено сообщение об ошибке при передаче массива в withAddedHeader()

  • Изменены параметры метода Imi\Util\File::path() на переменные, что позволяет объединять бесконечное количество путей

Последнее сообщение коммита: Merge branch 'dev'
Предпросмотр версии
03.03.2025 16:41
GitLife Service Account

Срочный ремонт ошибки

Последнее сообщение коммита: Merge branch 'dev'
Предпросмотр версии
03.03.2025 16:41
GitLife Service Account
  • Настройка процесса загрузки фреймворка

  • Добавление командной строки для запуска службы, остановки службы и повторной загрузки службы

  • Добавление поддержки горячей перезагрузки бизнес-кода (два способа выбора: время изменения файла / расширение inotify)

  • Добавление поддержки использования аннотаций для определения и отправки задач

  • Добавление поддержки создания и выполнения процессов

  • Преобразование асинхронного записи в файл с использованием потока вместо фонового режима для драйвера логирования файлов

  • PHP-рендеринг шаблонов проверяет, является ли параметр массивом, чтобы избежать ошибок при других типах данных

  • Изменение момента загрузки аннотаций сервера на событие WorkerStart

  • Удаление ненужных классов

  • Временная ошибка при отсутствии sessionid во время доступа исправлена

  • Исправлен баг при неверной работе приоритета аннотации @Listener

  • Исправлен баг при использовании верхнего регистра первой буквы в каскадном имени

  • Исправлен баг при выводе сообщения об ошибке при использовании параметра -h для инструмента без параметров

Последнее сообщение коммита: Merge branch 'dev'
Предпросмотр версии
03.03.2025 16:41
GitLife Service Account
  • Обновление зависимостей фреймворка: php >= 7.1 + swoole >= 4.0.0 (ранее использовались php 7.0 + swoole 2.2.0)

  • Добавлен Redis-модуль

  • Добавлена методика двойной camel-case нотации

  • Добавлены методы создания файлов и директорий

  • Добавлена возможность автоматического создания директорий в классах работы с сессиями

  • Добавлена поддержка сброса пула ресурсов

  • Улучшено производительство методики конвертации в camel-case нотацию

  • Изменены свойства и методы, связанные с ключами таблицы памяти, чтобы избежать конфликтов с полями

  • Исправлена проблема, при которой задачи всегда отправлялись в одинаковый процесс task

  • Исправлена проблема BaseAsyncPool->tryGetResource()

Последнее сообщение коммита: 移除Call类,swoole4.0开始完美支持协程
Предпросмотр версии
03.03.2025 16:40
GitLife Service Account

Первая версия

Последнее сообщение коммита: 修复投递任务每次都在同一个task进程问题
1
https://api.gitlife.ru/oschina-mirror/yurunsoft-IMI.git
git@api.gitlife.ru:oschina-mirror/yurunsoft-IMI.git
oschina-mirror
yurunsoft-IMI
yurunsoft-IMI