tourze/bundle-dependency
Composer 安装命令:
composer require tourze/bundle-dependency
包简介
Bundle dependency resolver for Symfony
README 文档
README
A lightweight interface and resolver for managing Symfony bundle dependencies, enabling automatic resolution and circular dependency detection.
Features
- Simple interface - Define bundle dependencies with a single method
- Automatic resolution - Recursively resolves all bundle dependencies
- Circular detection - Prevents circular dependencies (with graceful handling)
- Environment support - Control bundle loading per environment (dev, test, prod)
- Lightweight - No external dependencies except PHP 8.1+
Installation
composer require tourze/bundle-dependency
Quick Start
1. Implement the interface in your bundle
<?php use Tourze\BundleDependency\BundleDependencyInterface; use Symfony\Component\HttpKernel\Bundle\Bundle; class YourBundle extends Bundle implements BundleDependencyInterface { public static function getBundleDependencies(): array { return [ // Load in all environments 'Vendor\RequiredBundle\RequiredBundle' => ['all' => true], // Load only in dev and test environments 'Vendor\DebugBundle\DebugBundle' => ['dev' => true, 'test' => true], // Load only in production 'Vendor\OptimizedBundle\OptimizedBundle' => ['prod' => true], ]; } }
2. Resolve dependencies
<?php use Tourze\BundleDependency\ResolveHelper; // Resolve all dependencies for a set of bundles $bundles = [ 'App\YourBundle\YourBundle' => ['all' => true], ]; foreach (ResolveHelper::resolveBundleDependencies($bundles) as $bundle => $environments) { // $bundle = 'Vendor\RequiredBundle\RequiredBundle' // $environments = ['all' => true] } // Or resolve by bundle name foreach (ResolveHelper::resolveByBundleName('YourBundle') as $bundleName) { // Returns simplified bundle names }
Advanced Usage
Integration with Symfony Kernel
<?php use Symfony\Component\HttpKernel\Kernel; use Tourze\BundleDependency\ResolveHelper; class AppKernel extends Kernel { public function registerBundles(): iterable { $bundles = [ 'App\CoreBundle\CoreBundle' => ['all' => true], 'App\ApiBundle\ApiBundle' => ['all' => true], ]; // Automatically resolve and register all dependencies foreach (ResolveHelper::resolveBundleDependencies($bundles) as $bundle => $envs) { if (isset($envs['all']) || isset($envs[$this->environment])) { yield new $bundle(); } } } }
Handling circular dependencies
The resolver gracefully handles circular dependencies by skipping already-resolving bundles:
// BundleA depends on BundleB // BundleB depends on BundleA // No exception thrown, both bundles are resolved once
API Reference
BundleDependencyInterface
interface BundleDependencyInterface { /** * Get bundle dependencies with their environment configuration * * @return array<class-string, array<string, bool>> */ public static function getBundleDependencies(): array; }
ResolveHelper
class ResolveHelper { /** * Recursively resolve bundle dependencies * * @param array<class-string, array<string, bool>> $bundles Initial bundles * @return \Traversable<class-string, array<string, bool>> Resolved bundles */ public static function resolveBundleDependencies(array $bundles): \Traversable; /** * Resolve dependencies by bundle name * * @param string $bundleName Bundle name (e.g., 'YourBundle') * @return \Traversable<string> Simplified bundle names */ public static function resolveByBundleName(string $bundleName): \Traversable; }
Configuration
This package requires no configuration. Simply implement the
BundleDependencyInterface in your bundles and use the ResolveHelper
to resolve dependencies.
Environment Configuration
Supported environment keys:
'all' => true- Load in all environments'dev' => true- Load only in development'test' => true- Load only in testing'prod' => true- Load only in production
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Testing
# Run tests ./vendor/bin/phpunit packages/bundle-dependency/tests # Run static analysis php -d memory_limit=2G ./vendor/bin/phpstan analyse packages/bundle-dependency
License
The MIT License (MIT). Please see License File for more information.
tourze/bundle-dependency 适用场景与选型建议
tourze/bundle-dependency 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 42.28k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 03 月 23 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 tourze/bundle-dependency 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tourze/bundle-dependency 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 42.28k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 15
- 依赖项目数: 256
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-03-23