cloud-castle / provider
Сервис-провайдеры для PHP 8.1+ поверх cloud-castle/di: модульная регистрация сервисов, отложенные (deferred) провайдеры и загрузочное ядро (bootstrap) приложения.
Requires
- php: >=8.1
- cloud-castle/di: ^1.0
Requires (Dev)
- deptrac/deptrac: ^3.0 || ^4.0
- ergebnis/composer-normalize: ^2.45
- friendsofphp/php-cs-fixer: ^3.75
- icanhazstring/composer-unused: ^0.9
- infection/infection: ^0.29 || ^0.33
- php-parallel-lint/php-parallel-lint: ^1.4
- phpmd/phpmd: ^2.15
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.12 || ^2.1
- phpstan/phpstan-deprecation-rules: ^1.2 || ^2.0
- phpstan/phpstan-phpunit: ^1.4 || ^2.0
- phpstan/phpstan-strict-rules: ^1.6 || ^2.0
- phpunit/phpunit: ^10.5 || ^11.5
- psalm/plugin-phpunit: ^0.19 || ^0.20
- rector/rector: ^1.2 || ^2.0
- roave/security-advisories: dev-latest
- squizlabs/php_codesniffer: ^3.12 || ^4.0
- vimeo/psalm: ^6.0
- webmozart/assert: ^1.11
This package is auto-updated.
Last update: 2026-07-29 09:12:03 UTC
README
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CloudCastle Provider
Двухфазная загрузка сервис-провайдеров в контейнер cloud-castle/di: сначала
registerу всех, затемbootу всех. Отложенные провайдеры загружаются лениво — при первом обращении к их сервисам.
Установка
composer require cloud-castle/provider
Требуется PHP 8.1+ и cloud-castle/di.
Быстрый старт
<?php
use CloudCastle\DI\Container;
use CloudCastle\Provider\AbstractServiceProvider;
use CloudCastle\Provider\ProviderKernel;
final class MailProvider extends AbstractServiceProvider
{
public function register(Container $container): void
{
$container->addDefinitions(['mailer' => static fn () => new Mailer()]);
}
public function boot(Container $container): void
{
// Здесь уже доступны сервисы других провайдеров.
}
}
$kernel = new ProviderKernel($container);
$kernel->register(new MailProvider())
->register(new LogProvider());
$kernel->boot(); // register у всех, затем boot у всех
Возможности
- Двухфазная загрузка —
ProviderKernel::boot()вызываетregisterу всех провайдеров и лишь затемboot, поэтому на этапеbootдоступны сервисы любого провайдера. Повторныйboot()идемпотентен. - Отложенные провайдеры (
DeferredServiceProvider) — регистрируются лениво при первом обращении к любому из объявленныхprovides()сервисов; тяжёлые провайдеры не грузятся, пока не понадобятся. Один провайдер грузится один раз. AbstractServiceProvider— база с пустыми фазами: переопределяйте только нужную (registerи/илиboot).- Fluent-регистрация —
register()возвращает загрузчик для цепочки вызовов.
Сравнение с аналогами
| Возможность | provider | laravel (illuminate) | pimple | league/container | symfony (bundles) | php-di |
|---|---|---|---|---|---|---|
| Двухфазность register+boot | 🏆 ✅ | ✅ | ❌ | ⚠️ | ✅ | ❌ |
| Отложенные провайдеры | ✅ | ✅ | ❌ | ❌ | ⚠️ | ❌ |
| Идемпотентная загрузка | 🏆 ✅ | ⚠️ | — | ⚠️ | ✅ | — |
| Автономность (без фреймворка) | 🏆 ✅ | ❌ | ✅ | ✅ | ❌ | ✅ |
| Runtime-зависимостей | 🏆 1 (di) | много | 0 | 1 | много | 0 |
Когда применять. provider уместен как лёгкий механизм модульной загрузки для
приложений на cloud-castle/di: разнести регистрацию сервисов по провайдерам,
получить предсказуемый порядок и ленивую загрузку тяжёлых модулей. Если вы уже
внутри Laravel или Symfony — используйте их штатные провайдеры/бандлы: этот пакет
нацелен на автономный DI вне тяжёлого фреймворка.
Разработка
composer install
composer check # линтеры + статический анализ + тесты
composer fix # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci # полный CI-пайплайн локально
Полный список команд с описаниями: composer run-script --list.
Документация
- Репозиторий: https://gitverse.ru/cloud-castle/provider
- История изменений: CHANGELOG.md
- Как внести вклад: CONTRIBUTING.md
- Кодекс поведения: CODE_OF_CONDUCT.md
- Политика безопасности: SECURITY.md
Лицензия
MIT © CloudCastle (alex-4-17@yandex.ru)
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano