jean-sebastien-christophe / ux-calendar-bundle
A modern calendar bundle for Symfony 7.4/8 with Turbo and Stimulus - no third-party libraries
Installs: 10
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
Type:symfony-bundle
pkg:composer/jean-sebastien-christophe/ux-calendar-bundle
Requires
- php: >=8.2
- doctrine/doctrine-bundle: ^2.0|^3.0
- doctrine/orm: ^2.0|^3.0
- symfony/asset-mapper: ^7.4|^8.0
- symfony/form: ^7.4|^8.0
- symfony/framework-bundle: ^7.4|^8.0
- symfony/stimulus-bundle: ^2.0
- symfony/twig-bundle: ^7.4|^8.0
- symfony/ux-turbo: ^2.0
- symfony/validator: ^7.4|^8.0
- twig/intl-extra: ^3.0
Suggests
- easycorp/easyadmin-bundle: For admin panel integration with CRUD controller and dashboard widgets (^4.0)
- symfony/ux-chartjs: For displaying event statistics charts in the dashboard (^2.0)
README
Bundle calendrier léger pour Symfony 7.4+ et 8 basé sur Turbo et Stimulus, sans dépendances externes de type FullCalendar. Idéal pour une intégration rapide avec un minimum de configuration.
Fonctionnalités clés
- Vue mensuelle réactive avec Turbo Streams
- Création, édition et suppression d'événements (journée ou horaires)
- Couleurs personnalisables et interface Bootstrap 5 responsive
- Aucun JS lourd : uniquement Stimulus
Installation rapide
composer require jean-sebastien-christophe/calendar-bundle composer require symfony/asset-mapper symfony/ux-turbo symfony/stimulus-bundle
Activez le bundle via Symfony Flex ou ajoutez-le dans config/bundles.php si nécessaire :
JeanSebastienChristophe\CalendarBundle\CalendarBundle::class => ['all' => true],
Routes obligatoires (config/routes/calendar.yaml) :
calendar_bundle: resource: '@CalendarBundle/src/Controller/' type: attribute
Base de données :
php bin/console make:migration php bin/console doctrine:migrations:migrate
Important : Après l'installation, videz le cache Symfony pour que les assets du bundle soient correctement enregistrés :
php bin/console cache:clear
Les assets CSS du bundle sont automatiquement exposés via AssetMapper. Aucune commande assets:install n'est nécessaire.
Stimulus (copie du contrôleur) :
mkdir -p assets/controllers cp vendor/jean-sebastien-christophe/calendar-bundle/assets/dist/controllers/calendar_controller.js assets/controllers/
Enregistrez-le dans assets/app.js :
import '@hotwired/turbo'; import './bootstrap.js'; import { startStimulusApp } from '@hotwired/stimulus-bundle'; import CalendarController from './controllers/calendar_controller.js'; const app = startStimulusApp(); app.register('calendar', CalendarController);
Lancez votre serveur et ouvrez /calendar.
Configuration (optionnelle)
Créer config/packages/calendar.yaml si vous voulez changer l'URL ou les options :
calendar: route_prefix: /calendar features: all_day_events: true colors: true
Personnalisation
- Surchargez les templates dans
templates/bundles/CalendarBundle/calendar/. - Étendez l'entité
Eventpour définir une couleur par défaut ou ajouter des champs métier.
État du bundle
Version initiale en cours de préparation pour la distribution. Tests et vues supplémentaires (semaine/jour) arriveront dans les prochaines itérations.
Routes exposées
| Méthode | Route | Nom | Description |
|---|---|---|---|
| GET | /events |
calendar_index |
Redirige vers mois courant |
| GET | /events/{year}/{month} |
calendar_month |
Affiche le calendrier |
| GET | /events/new |
calendar_event_new |
Formulaire création |
| POST | /events |
calendar_event_new |
Crée l'événement |
| GET | /events/{id}/edit |
calendar_event_edit |
Formulaire édition |
| POST | /events/{id} |
calendar_event_edit |
Met à jour l'événement |
| DELETE | /events/{id} |
calendar_event_delete |
Supprime l'événement |
🚀 Utilisation
Créer un événement
Cliquez sur une date dans le calendrier → Un modal s'ouvre avec le formulaire pré-rempli.
Modifier un événement
Cliquez sur un événement → Le modal d'édition s'ouvre.
Navigation
Utilisez les boutons ← Mois précédent | Aujourd'hui | Mois suivant →
Turbo Streams en action
Toutes les actions (création, modification, suppression) mettent à jour le calendrier sans rechargement de page grâce à Turbo Streams !
🔧 Dépannage
Erreur : "CalendarBundle requires Turbo Bundle"
composer require symfony/ux-turbo php bin/console cache:clear
Erreur : "CalendarBundle requires Stimulus Bundle"
composer require symfony/stimulus-bundle php bin/console importmap:install
Erreur : "CalendarBundle requires AssetMapper"
composer require symfony/asset-mapper php bin/console importmap:install
Le contrôleur Stimulus ne fonctionne pas
Vérifiez que vous avez bien :
- Copié
calendar_controller.jsdansassets/controllers/ - Enregistré le contrôleur dans votre
app.js - Lancé
php bin/console asset-map:compile
🗺️ Roadmap (V2)
- Vue semaine
- Vue jour
- Drag & drop pour déplacer les événements
- Événements récurrents
- Export iCal
- Catégories d'événements
- Multi-utilisateurs (événements privés/publics)
- API REST
- Interface
CalendarEventInterfacepour plus de flexibilité - Trait
CalendarEventTrait - Tests PHPUnit
📄 Licence
MIT
🤝 Contribution
Les contributions sont les bienvenues !
- Fork le projet
- Créez votre branche (
git checkout -b feature/amazing-feature) - Commit vos changements (
git commit -m 'Add amazing feature') - Push vers la branche (
git push origin feature/amazing-feature) - Ouvrez une Pull Request
📞 Support
Pour toute question ou problème, ouvrez une issue sur GitHub.
Fait avec ❤️ pour la communauté Symfony