定制 tourze/bundle-dependency 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

tourze/bundle-dependency

Composer 安装命令:

composer require tourze/bundle-dependency

包简介

Bundle dependency resolver for Symfony

README 文档

README

English | 中文

Latest Version Total Downloads PHP Version License

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

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. 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 我们能提供哪些服务?
定制开发 / 二次开发

基于 tourze/bundle-dependency 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 42.28k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 15
  • 依赖项目数: 256
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-03-23