Download the PHP package troum/mycro-core without Composer

On this page you can find all versions of the php package troum/mycro-core. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package mycro-core

troum/mycro-core

Общая PHP-библиотека для микросервисов: типизированные DTO с гидратацией из массивов, интеграция с RabbitMQ и простой файловый логгер.

Требования: PHP ^8.4, php-amqplib/php-amqplib ^3.5

Пространство имён: Mycro\Core\


Установка

Пакет доступен на Packagist:

Рекомендуемый constraint — ^1.1. Версии отмечаются git-тегами (v1.1.0, v1.1.3 и т.д.):


DTO (BaseDto)

Базовый класс для immutable DTO. Свойства объявляются как public readonly — значения задаются один раз при создании из массива (например, из HTTP-запроса или сообщения очереди).

Минимальный пример

Правила гидратации

  1. Обрабатываются только свойства с модификатором readonly.
  2. Ключи входного массива приводятся к snake_case (firstName, first-name, first_name → first_name). Нормализуется только верхний уровень — вложенные массивы передаются в свойство как есть, вместе с исходными ключами.
  3. Если значение не найдено и нет атрибута DefaultValue / необязательного MapProperty, выбрасывается DtoHydrationException.
  4. Повторная инициализация уже заданного readonly-свойства запрещена (ReadonlyPropertyUpdateException).

Атрибут DefaultValue

Задаёт значение, если ключ отсутствует в данных:

Атрибут MapProperty

Сопоставляет свойство DTO с одним или несколькими ключами во входных данных (после нормализации в snake_case):

Порядок поиска значения: алиасы из from → имя свойства → DefaultValue → null (если required: false).

Атрибут Transform

Преобразует значение после разрешения маппера, до записи в свойство. Трансформер должен реализовать TransformerContract:

Частичное обновление: wasProvided() и providedAttributes()

toArray() возвращает все readonly-свойства, включая значения из DefaultValue и null от required: false. Для PATCH-запросов этого недостаточно: непонятно, что клиент прислал, а что подставила библиотека.

DTO запоминает, ключи каких свойств действительно присутствовали во входном массиве:

Для частичного обновления используйте providedAttributes() вместо array_filter($dto->toArray(), fn ($v) => $v !== null):

Для создания записи по-прежнему нужен toArray() — там значения по умолчанию как раз необходимы.

Кастомный PropertyMapper

По умолчанию используется DefaultPropertyMapper. Свой маппер подключается глобально для всех DTO:

Интерфейс PropertyMapperInterface::resolve() возвращает кортеж [bool $hasValue, mixed $value, bool $fromInput].

Третий элемент — позиционный и необязательный: маппер, возвращающий два элемента, продолжает работать, но wasProvided() и providedAttributes() для его DTO всегда будут пустыми. Возвращайте true только тогда, когда значение действительно взято из входного массива:

Проверяйте наличие ключа через array_key_exists(), а не isset() — иначе явный null не будет считаться переданным.


RabbitMQ

RabbitMQService

Подключение, публикация и потребление сообщений (JSON в теле, durable exchange/queue).

Поведение consumer:

RabbitMQConsumer

Тонкая обёртка над consume():

RabbitMQPublisherInterface

Интерфейс только для публикации — удобно для DI и моков в тестах:


Логирование

CoreLoggerInterface

Используется в RabbitMQ consumer. В Laravel-сервисе можно зарегистрировать адаптер к Log::channel().

FileCoreLogger

Запись в файл с меткой времени. По умолчанию: {package}/logs/core.log (каталог создаётся автоматически).


Исключения

Класс Когда
DtoHydrationException Обязательное свойство не передано и не задано по умолчанию
ReadonlyPropertyUpdateException Попытка повторно инициализировать readonly-свойство

Структура пакета


Тесты


Лицензия

MIT


All versions of mycro-core with dependencies

PHP Build Version
Package Version
Requires php Version ^8.4
php-amqplib/php-amqplib Version ^3.5
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package troum/mycro-core contains the following files

Loading the files please wait ...