specshaper/calendar-bundle
A Symfony bundle for adding calendar and event management to PHP applications. It offers Doctrine-backed calendar entities, configurable event handling, and Twig helpers for rendering month, week, and day views, making it easy to integrate schedules into existing projects.
v1.0.0 is explicitly labeled a snapshot of a working Symfony 3 bundle, not a stable API. It ships with a written warning that backward compatibility will be broken in the follow-up release. Treat it as an integration spike, not a dependency you adopt casually.
First steps before writing any code:
composer.json first. Check the symfony/* constraints, required PHP version, and whether symfony/framework-bundle is a hard dependency. This single file determines whether the package can even be installed alongside a modern Laravel app.*Bundle class, a DependencyInjection/*Extension.php, and XML/YAML service definitions, the useful code is almost certainly underneath those — plain services you can register yourself.ContainerAwareInterface, service locators, Kernel, Bundle, and event-dispatcher usage tied to Symfony's dispatcher. Those are the parts that will not travel to Laravel unchanged."vendor/package": "1.0.0" or a commit hash). Do not use a caret constraint — the maintainer has told you the next release breaks things.First use case: wire one service out of the bundle into a Laravel service provider manually, bypassing the bundle's bootstrapping entirely, and confirm it behaves. If that requires more than a thin adapter, the package is probably not a day-to-day fit for Laravel and is better consumed by porting the specific logic you need.
Adapter service provider. Do not attempt to boot the Symfony bundle inside Laravel. Register the underlying classes yourself:
public function register(): void
{
$this->app->singleton(SomeService::class, function ($app) {
return new SomeService(
$app->make(Dependency::class),
config('vendor-package.option'),
);
});
}
This isolates you from the package's container wiring, which is the most Symfony-specific and least portable part.
Config translation. Symfony bundles use Configuration classes with a tree builder and semantic validation. Laravel has no equivalent, so copy the defaults and validation rules into config/vendor-package.php by reading the bundle's Configuration.php directly. Silent behavior differences here are the most common source of "works in Symfony, wrong in Laravel" bugs.
Anti-corruption layer. Wrap the package behind an interface your app owns. Given the explicit BC-break notice, every call site outside the adapter is a future migration cost. Keep the adapter thin and the tests thick.
Skip the bundle class, keep the services. Laravel already ships its own Symfony components at a much newer major. You cannot run a Symfony 3 Bundle lifecycle inside Laravel; you can, however, usually instantiate the plain service classes if their constructor dependencies are resolvable.
Testing strategy. Write contract tests around the adapter layer that assert observable behavior, not package internals. When the Symfony 4 version lands, those tests tell you what actually changed in the parts you use.
symfony/*: ~2.8|~3.0, which conflicts with the framework's own Symfony components. Run composer why-not vendor/package before assuming the failure is your fault. Resolving this generally means --ignore-platform-reqs (fragile) or a fork with widened constraints.1.0.0 here does not mean "stable." It means "this is where we froze the Symfony 3 work before the port." Semver guarantees do not apply; the release note says so in plain language.Configuration class against your config file key by key.composer why-not, composer show --tree, and checking for replace/provide blocks will explain most resolution failures. Also check for global helper functions and autoloaded files, which can collide in a Laravel app.Extension, CompilerPass) buys you coupling to code that is about to change. Adapt, don't extend.How can I help you explore Laravel packages today?