phil / recurrence-bundle
phil/recurrence in Symfony: a form for common recurrence rules with a Stimulus controller, the column type phil_rrule, and rules written in words and their occurrences in Twig
Package info
github.com/parler-haut-interagir-librement/recurrence-bundle
Type:symfony-bundle
pkg:composer/phil/recurrence-bundle
Requires
- php: >=8.5
- ext-intl: *
- phil/recurrence: ^0.1@dev
- symfony/dependency-injection: ^8.2
- symfony/form: ^8.2
- symfony/options-resolver: ^8.2
- symfony/translation-contracts: ^3.6
Requires (Dev)
- doctrine/dbal: ^4.5
- doctrine/doctrine-bundle: ^3.3
- doctrine/orm: ^3.7
- phpunit/phpunit: ^13.4
- psr/log: ^3.0
- 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_rrule column type
- twig/twig: For the rrule_text filter and the rrule_occurrences and rrule_schema functions
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-11 06:16:44 UTC
README
A form for repeating events, a column to store the rule, and the rule in words.
phil/recurrence-bundle brings phil/recurrence into a Symfony application. RecurrenceRuleType is a form for the
rules people set: every so many days, weeks, months or years, on weekdays, on a day of the month or the nth weekday,
in some months, until a date or a number of times. The column type phil_rrule stores a rule with Doctrine. In Twig,
rrule_text writes a rule in words, such as Tous les mois le deuxième mardi, and rrule_occurrences lists its
dates, and rrule_schema gives it as schema.org data for JSON-LD. Labels and sentences come in English and French.
It is for an application where an editor or an organizer schedules repeating events through a form and visitors read
when they happen. The form holds the rules people actually set. A rule beyond its fields, such as one with set
positions, still reads in the library; the form shows what it can hold of it, and gives it back whole when it is
submitted untouched. Reach for phil/recurrence alone
outside Symfony, or when no form or storage is needed. phil/calendar-bundle builds a whole calendar on this bundle.
The form plugs into Symfony Form through a data transformer to and from a RecurrenceRule. A small Stimulus
controller shows the rows of the frequency and the end chosen, and disables the others so they are not sent. The
sentences are ICU messages in the phil_recurrence domain, with days and months named by ICU in the reader's
language.
Status
| Part | State |
|---|---|
RecurrenceRuleType and the Stimulus controller recurrence |
Implemented and tested |
RuleDescription: rules in words, ICU messages |
Implemented and tested |
The column type phil_rrule |
Implemented and tested |
Twig: the filter rrule_text, the functions rrule_occurrences and rrule_schema |
Implemented and tested |
Documentation
| Document | What it covers |
|---|---|
| Installation | Requirements and registering. |
| Forms | RecurrenceRuleType, what it holds, its Stimulus controller. |
| Words, Twig and storage | RuleDescription, the Twig filter and functions, phil_rrule, schema.org. |
| 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/recurrence-bundle
#[ORM\Column(type: 'phil_rrule', nullable: true)] private ?RecurrenceRule $rule = null; $builder->add('rule', RecurrenceRuleType::class, ['required' => false]);
{{ event.rule|rrule_text }}
Requirements
PHP 8.5 or later with ext-intl; phil/recurrence 0.1; Symfony 8.2's dependency injection, form and options
resolver, and the translation contracts — with a translator that reads ICU messages. Doctrine DBAL and Twig are
optional.
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.