tattali/calendar-bundle
A Symfony bundle for rendering responsive calendars in Twig, with month, week, and day views. Feed events through flexible providers, customize templates and styling, and add schedulers or event calendars to any Symfony app with minimal configuration.
tattali/CalendarBundle remains a Symfony-heritage calendar/event bundle (RequestParser, controller, serializer, listeners) rather than a native Laravel package. v8.3.0 widens scope: it now mandates Symfony 8 and PHP 8.4+, adds GET support on the events feed with private ETag revalidation, FullCalendar timeZone support, and an immutable-date model across the Event constructor, setters, getters, and listener payloads. Laravel fit still requires a wrapper or manual service binding, but the new interface aliases (#146) make container wiring slightly more predictable if we alias the parser/serializer interfaces ourselves.DateTimeInterface and an allDay argument, and the constructor passes given dates straight to setters (#145) — subclasses or factories overriding setters may see different behavior; (2) getters return immutable dates and listeners receive immutable request dates (#143/#144) — any code calling mutable methods (modify(), setDate()) on returned objects will now fail or silently get new instances; (3) only ISO 8601 start/end dates accepted (#149) — free-form or locale-formatted date strings from existing clients will be rejected; (4) final classes break extension, decoration-via-inheritance, and PHPUnit mocking; (5) PHP 8.4 / Symfony 8 minimums. Behavioral risk is not confined to one endpoint as in v8.2.1 — it touches the whole date model.RequestParser, the serializer, or bundle exceptions anywhere (now final)? Does any internal code mutate dates returned from Event getters or from listeners? Do our clients always send ISO 8601 start/end, and do they send timeZone? Do we want the new GET-with-ETag feed behavior, and does our caching layer honor private ETags / If-None-Match? Are listeners typed against DateTimeInterface or concrete mutable DateTime? Has each step in docs/upgrade-to-83.md been mapped to a test?docs/upgrade-to-83.md and apply its Migration Steps one-for-one as tracked work items (#151 explicitly enumerates them). Recommended path: v8.2.1 → PHP 8.4 runtime upgrade → Symfony 8 components → v8.3.0 on a branch, with the date-model changes (ISO 8601 validation, immutable getters, allDay arg, DateTimeInterface setters) covered by tests before staging. If we are still evaluating and not yet in production, start at v8.3.0 and avoid inheriting the migration entirely.composer.json and the Laravel version’s Symfony component range; a mismatch here blocks everything else. Audit for extends/final conflicts on the parser, serializer, and exception classes, and for test doubles of those types. Verify Mockery/PHPUnit mocking strategy is replaced with interface-based fakes. Confirm Laravel middleware preserves the POST body (still relevant from v8.2.1) and that ETag/If-None-Match headers survive our reverse proxy and cache layers for the new GET feed.composer why-not / constraint analysis for PHP 8.4 and Symfony 8; 2) inventory all RequestParser, serializer, Event, and listener touchpoints; 3) remove or refactor inheritance and mocks against now-final classes; 4) normalize all client-supplied dates to ISO 8601 and add timeZone support where the front end needs it; 5) migrate date handling to DateTimeInterface/immutable semantics in app code; 6) deploy v8.3.0 to staging behind the existing calendar endpoints and run ETag revalidation tests; 7) production canary with 4xx/5xx and cache-hit monitoring; 8) update API docs for ISO 8601-only dates, allDay, timeZone, and GET feed semantics.timeZone/allDay semantics, and ETag behavior for the GET feed.If-None-Match; if they don’t, expect flat or slightly higher request volume on the feed endpoint.composer update failing on PHP 8.4 / Symfony 8 constraints mid-sprint. allDay and timeZone mishandled if clients send them but our serializer/adapter drops them. Cache correctness issues if private ETags leak across users. Rollback to v8.2.1 is possible only if the PHP 8.4 / Symfony 8 runtime changes are also reverted — plan the rollback as a coordinated revert, not a single Composer pin.allDay, and timeZone contracts ahead of rollout.How can I help you explore Laravel packages today?