This document describes the complete structure of bundles generated by make-bundle.
When you run bin/console make:bundle acme/awesome-utilities lib, it creates a complete bundle structure in lib/acme/awesome-utilities/.
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
The .recipe/ directory contains a Symfony Flex recipe that enables automatic bundle registration when installed via Composer.
.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)
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",
""
]
}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
The DI extension that loads configuration and registers services. Automatically discovered in Symfony 7.4+.
The configuration tree builder that validates and normalizes configuration values.
When you enable features during bundle generation, additional files and directories are created:
src/Service/- Directory for service classes
src/Command/- Directory for console commands- Commands use
#[AsCommand]attribute (Symfony 7.0+) or$defaultNameproperty (Symfony 6.4)
src/Controller/- Directory for controllerstemplates/- Twig templates directory- Routes use
#[Route]attribute (Symfony 7.0+) or@Routeannotation (Symfony 6.4)
src/Twig/- Directory for Twig extensions
src/EventSubscriber/- Directory for event subscribers
src/Form/- Directory for form types
src/Validator/- Directory for custom validators
src/DependencyInjection/Compiler/- Directory for compiler passes
tests/Unit/- Unit tests (if enabled)tests/Integration/- Integration tests (if enabled)tests/Functional/- Functional tests (if enabled)tests/bootstrap.php- Test bootstrap filephpunit.xml- PHPUnit configurationphpstan.neon- PHPStan configuration
docs/- Documentation directorydocs/index.md- Main documentation file
- Annotations instead of attributes:
@Route,@AsCommand $defaultNameproperty in commandsgetContainerExtension()method in bundle class
- Attributes:
#[Route],#[AsCommand] getContainerExtension()method still required
- Attributes:
#[Route],#[AsCommand] - Extension auto-discovery (no
getContainerExtension()method) - Improved configuration validation
- All features from Symfony 7.4+
- PHP 8.3+ required
- Latest Symfony features
Includes:
- Package name and description
- PHP version requirement (based on Symfony version)
- Symfony version constraints
- Development dependencies (PHPUnit, PHPStan, etc.)
Default service configuration with autowiring and autoconfiguration enabled.
PHPUnit configuration with code coverage settings and test suites.
PHPStan configuration with level max (9) for strict type checking.
After generating your bundle:
- Install dependencies:
composer install - Configure bundle: Edit
config/packages/[bundle_name].yaml - Add your code: Start implementing services, commands, controllers, etc.
- Write tests: Add tests in
tests/directory - Document: Update
README.mdwith usage instructions
For more information, see: