Skip to content

Latest commit

 

History

History
205 lines (138 loc) · 6.21 KB

File metadata and controls

205 lines (138 loc) · 6.21 KB

Generated Bundle Structure

This document describes the complete structure of bundles generated by make-bundle.

Overview

When you run bin/console make:bundle acme/awesome-utilities lib, it creates a complete bundle structure in lib/acme/awesome-utilities/.

Complete Structure

lib/acme/awesome-utilities/
├── .recipe/                              # Symfony Flex recipe
│   └── 0.1/
│       ├── manifest.json                 # Bundle registration and post-install output
│       └── config/packages/
│           └── acme_awesome_utilities.yaml  # Default configuration
├── src/
│   ├── DependencyInjection/
│   │   ├── AwesomeUtilitiesExtension.php  # Extension class
│   │   └── Configuration.php              # Configuration tree builder
│   └── AcmeAwesomeUtilitiesBundle.php     # Main bundle class
├── src/Resources/config/
│   └── services.yaml                      # Service definitions
├── tests/                                 # Test structure (if enabled)
│   ├── Unit/
│   └── Integration/
├── composer.json                          # Package definition
├── README.md                              # Bundle documentation
├── phpstan.neon                           # PHPStan configuration
├── phpunit.xml                            # PHPUnit configuration
└── .gitignore                             # Git ignore rules

Symfony Flex Recipe

The .recipe/ directory contains a Symfony Flex recipe that enables automatic bundle registration when installed via Composer.

Structure

  • .recipe/0.1/manifest.json - Recipe manifest with bundle registration and optional post-install output
  • .recipe/0.1/config/packages/ - Default configuration files (if enabled)

Manifest.json

The manifest.json file registers the bundle and can include:

  • Bundle Registration: Automatically registers the bundle in config/bundles.php
  • Config Files: Copies default configuration files to config/packages/
  • Post-Install Output: Displays helpful messages after installation

Example manifest:

{
    "bundles": {
        "Acme\\AwesomeUtilities\\AcmeAwesomeUtilitiesBundle": ["all"]
    },
    "copy-from-recipe": {
        "config/": "%CONFIG_DIR%/"
    },
    "post-install-output": [
        "",
        "✅ Bundle registered successfully!",
        "",
        "Next steps:",
        "1. Configure bundle in config/packages/acme_awesome_utilities.yaml",
        ""
    ]
}

Source Files

Bundle Class (src/AcmeAwesomeUtilitiesBundle.php)

The main bundle class that extends Bundle. Depending on the Symfony version:

  • Symfony 7.4+: No getContainerExtension() method (auto-discovery)
  • Symfony < 7.4: Includes getContainerExtension() method

Extension Class (src/DependencyInjection/AwesomeUtilitiesExtension.php)

The DI extension that loads configuration and registers services. Automatically discovered in Symfony 7.4+.

Configuration Class (src/DependencyInjection/Configuration.php)

The configuration tree builder that validates and normalizes configuration values.

Optional Features

When you enable features during bundle generation, additional files and directories are created:

Services (hasServices: true)

  • src/Service/ - Directory for service classes

Commands (hasCommands: true)

  • src/Command/ - Directory for console commands
  • Commands use #[AsCommand] attribute (Symfony 7.0+) or $defaultName property (Symfony 6.4)

Controllers (hasControllers: true)

  • src/Controller/ - Directory for controllers
  • templates/ - Twig templates directory
  • Routes use #[Route] attribute (Symfony 7.0+) or @Route annotation (Symfony 6.4)

Twig Extensions (hasTwigExtensions: true)

  • src/Twig/ - Directory for Twig extensions

Event Subscribers (hasFeature('event_subscribers'))

  • src/EventSubscriber/ - Directory for event subscribers

Form Types (hasFeature('form_types'))

  • src/Form/ - Directory for form types

Validators (hasFeature('validators'))

  • src/Validator/ - Directory for custom validators

Compiler Passes (hasFeature('compiler_passes'))

  • src/DependencyInjection/Compiler/ - Directory for compiler passes

Tests (hasTests: true)

  • tests/Unit/ - Unit tests (if enabled)
  • tests/Integration/ - Integration tests (if enabled)
  • tests/Functional/ - Functional tests (if enabled)
  • tests/bootstrap.php - Test bootstrap file
  • phpunit.xml - PHPUnit configuration
  • phpstan.neon - PHPStan configuration

Documentation (hasDocumentation: true)

  • docs/ - Documentation directory
  • docs/index.md - Main documentation file

Version-Specific Differences

Symfony 6.4

  • Annotations instead of attributes: @Route, @AsCommand
  • $defaultName property in commands
  • getContainerExtension() method in bundle class

Symfony 7.0-7.3

  • Attributes: #[Route], #[AsCommand]
  • getContainerExtension() method still required

Symfony 7.4+

  • Attributes: #[Route], #[AsCommand]
  • Extension auto-discovery (no getContainerExtension() method)
  • Improved configuration validation

Symfony 8.0

  • All features from Symfony 7.4+
  • PHP 8.3+ required
  • Latest Symfony features

Configuration Files

composer.json

Includes:

  • Package name and description
  • PHP version requirement (based on Symfony version)
  • Symfony version constraints
  • Development dependencies (PHPUnit, PHPStan, etc.)

services.yaml

Default service configuration with autowiring and autoconfiguration enabled.

phpunit.xml

PHPUnit configuration with code coverage settings and test suites.

phpstan.neon

PHPStan configuration with level max (9) for strict type checking.

Next Steps

After generating your bundle:

  1. Install dependencies: composer install
  2. Configure bundle: Edit config/packages/[bundle_name].yaml
  3. Add your code: Start implementing services, commands, controllers, etc.
  4. Write tests: Add tests in tests/ directory
  5. Document: Update README.md with usage instructions

For more information, see: