Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Calendar Bundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

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:

  1. Read 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.
  2. Look for the bundle boundary. If the package contains a *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.
  3. Separate domain code from Symfony glue. Scan for 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.
  4. Pin the exact version ("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.

Implementation Patterns

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.

Gotchas and Tips

  • Composer will likely refuse to install it. Laravel 8+ requires Symfony 5/6; Laravel 11 requires Symfony 7. A Symfony 3 bundle typically pins 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.
  • Symfony 3 is end-of-life. Symfony 3.4 reached EOL in November 2021. There are no security patches. If the bundle pulls in Symfony 3 components transitively rather than sharing Laravel's, you are shipping unmaintained code.
  • 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.
  • Config quirks. Symfony's semantic config silently applies defaults for omitted keys. When you hand-translate to a Laravel config file, any key you drop becomes an unintended default. Diff the Configuration class against your config file key by key.
  • Debugging installs. 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 points are a trap here. Extending Symfony bundle classes (Extension, CompilerPass) buys you coupling to code that is about to change. Adapt, don't extend.
  • Watch for the follow-up release. The stated intent is Symfony 4 readiness, which implies a modernized dependency tree and an eventual path to current Symfony versions. Re-evaluate when that lands rather than building deep integrations against this snapshot.
  • Best fit today: lifting specific algorithms or domain logic out of the package and into your own code, not depending on the package as a runtime component.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator