phil / opening-hours-bundle
phil/opening-hours in Symfony: an opening hours form with a field a day and special hours, the JSON column type phil_opening_hours, and hours in Twig — open now, next opening, a localised table, schema.org
Package info
github.com/parler-haut-interagir-librement/opening-hours-bundle
Type:symfony-bundle
pkg:composer/phil/opening-hours-bundle
Requires
- php: >=8.5
- ext-intl: *
- ext-mbstring: *
- phil/opening-hours: ^0.1@dev
- psr/clock: ^1.0
- symfony/config: ^8.2
- symfony/dependency-injection: ^8.2
- symfony/form: ^8.2
- symfony/options-resolver: ^8.2
Requires (Dev)
- doctrine/dbal: ^4.5
- doctrine/doctrine-bundle: ^3.3
- doctrine/orm: ^3.7
- phpunit/phpunit: ^13.4
- psr/log: ^3.0
- symfony/clock: ^8.2
- symfony/event-dispatcher: ^8.2
- symfony/framework-bundle: ^8.2
- symfony/http-kernel: ^8.2
- symfony/translation: ^8.2
- symfony/twig-bridge: ^8.2
- symfony/twig-bundle: ^8.2
- symfony/validator: ^8.2
- twig/twig: ^3.21
Suggests
- doctrine/dbal: For the phil_opening_hours column type
- symfony/clock: Required with twig/twig: the Twig functions read now from the container's clock service, which FrameworkBundle registers once it is installed
- twig/twig: For the opening_hours_* functions and the table template
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-11 13:32:03 UTC
README
An opening hours form, a JSON column and localised hours in Twig, for Symfony.
phil/opening-hours-bundle brings the hours of phil/opening-hours into Symfony. OpeningHoursType has a field for
each day, named in the request's language, where the day's ranges are typed as 09:00-12:00, 13:00-17:00. It adds a
field for special hours, one period a line, and a choice of time zone. A field that cannot be read is invalid on its
own, with a message that shows how to type it. The Doctrine column type phil_opening_hours keeps hours in one JSON
column. In Twig, functions say whether the place is open now and when it next opens. Others write the week and the
special hours to come, and give the schema.org openingHoursSpecification. A table template shows the week. Labels
and messages are in English and French.
It is for Symfony applications where an editor or an administrator enters a place's hours and visitors read them. Days, dates and times are written by ICU in the request's language, so the same hours read lundi – vendredi for one visitor and Monday – Friday for another.
Outside Symfony, use phil/opening-hours on its own. The bundle adds what needs the framework or ext-intl: the
form, the column type, the ICU wording, and a PSR-20 clock for "now".
Status
| Part | State |
|---|---|
OpeningHoursType |
Implemented and tested |
The column type phil_opening_hours |
Implemented and tested |
Twig: opening_hours_open, _next, _week, _specials, _schema; the table template |
Implemented and tested |
| Labels and messages in English and French | Implemented and tested |
Documentation
| Document | What it covers |
|---|---|
| Installation | Requirements, registering, default_timezone. |
| Forms | OpeningHoursType and its options. |
| Doctrine | The column type phil_opening_hours. |
| Twig | The functions and the table template. |
| Extension points | What an application implements, configures, replaces or relies on. |
| Testing | How the bundle is tested. |
| Reference | Every type of the bundle. |
Quick start
composer require phil/opening-hours-bundle
#[ORM\Column(type: 'phil_opening_hours', nullable: true)] private ?OpeningHours $hours = null; $builder->add('hours', OpeningHoursType::class);
{% include '@PhilOpeningHours/table.html.twig' with {hours: shop.hours} %}
Requirements
PHP 8.5 or later with ext-intl and ext-mbstring; phil/opening-hours 0.1; psr/clock 1; symfony/config,
symfony/dependency-injection, symfony/form and symfony/options-resolver 8.2 or later. Doctrine DBAL and Twig
are optional. With Twig, the container needs a clock service, which FrameworkBundle registers once symfony/clock
is installed: without it, the container does not compile.
Contributing
Contributions are welcome on the PHIL monorepo: read the contribution guide and the code of conduct. Report a vulnerability privately, as the security policy explains, never in a public issue.
License
MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Parler Haut Interagir Librement project. See LICENSE.