Installation:
composer require carlescliment/calendar-bundle
Add the bundle to config/bundles.php (Symfony 4+) or AppKernel.php (Symfony 2/3):
BladeTester\CalendarBundle\BladeTesterCalendarBundle::class => ['all' => true],
Routing:
Import routes in config/routes.yaml (Symfony 4+):
calendar:
resource: "@BladeTesterCalendarBundle/Resources/config/routing.yml"
prefix: /calendar
First Use Case:
Create a custom bundle extending BladeTesterCalendarBundle (as shown in the README) to override default behavior. Example:
// src/YourBundle/YourCalendarBundle.php
namespace YourBundle;
use BladeTester\CalendarBundle\BladeTesterCalendarBundle as BaseBundle;
class YourCalendarBundle extends BaseBundle {
public function getParent() { return 'BladeTesterCalendarBundle'; }
}
Basic Usage:
Inject the CalendarManager service in a controller to fetch events:
use BladeTester\CalendarBundle\Manager\CalendarManager;
class CalendarController extends Controller {
public function index(CalendarManager $calendarManager) {
$events = $calendarManager->getEvents();
return $this->render('calendar/index.html.twig', ['events' => $events]);
}
}
Event Management:
CalendarManager to CRUD events:
$calendarManager->addEvent($event); // Add
$calendarManager->updateEvent($event); // Update
$calendarManager->deleteEvent($event); // Delete
$events = $calendarManager->getEventsBetween($startDate, $endDate);
View Integration:
{% render 'BladeTesterCalendarBundle:Calendar:month' with {'events': events} %}
templates/bundles/BladeTesterCalendarBundle/Calendar/.API-Driven Logic:
$events = $calendarManager->getAllEvents();
return $this->json($events);
Symfony Forms:
EventType form for event creation/editing:
$form = $this->createForm(EventType::class, $event);
calendar.manager.entity.class in config/packages/calendar.yaml to map events to your entity (e.g., App\Entity\Event).# config/routes.yaml
calendar:
resource: "@BladeTesterCalendarBundle/Resources/config/routing.yml"
prefix: /calendar
defaults: { _security: "is_granted('ROLE_USER')" }
config/packages/calendar.yaml:
calendar:
date_format: 'd/m/Y'
time_format: 'H:i'
Bundle Naming Conflict:
BladeTesterCalendarBundle is a placeholder. Replace it with Carlescliment\CalendarBundle (actual package name) in getParent() and routing.Event Entity Mismatch:
BladeTester\CalendarBundle\Model\EventInterface. Common pitfalls:
getStart()/getEnd() methods.DateTime vs. string).Routing Overrides:
# src/Resources/config/routing.yml
your_calendar:
resource: "@YourBundle/Resources/config/routing.yml"
prefix: /calendar
Twig Template Caching:
php bin/console cache:clear
Event Not Displaying?:
start and end dates are valid DateTime objects.php bin/console doctrine:schema:validate
404 on Routes:
WebBundle) in config/bundles.php.Custom Views:
CalendarView class to add new layouts:
class CustomCalendarView extends CalendarView {
public function renderWeekView() { /* ... */ }
}
# config/services.yaml
services:
App\Calendar\CustomCalendarView:
tags: ['calendar.view']
Event Providers:
BladeTester\CalendarBundle\Provider\EventProviderInterface for dynamic event sources (e.g., API calls):
class ApiEventProvider implements EventProviderInterface {
public function getEvents() { /* ... */ }
}
tags: ['calendar.event_provider']
Configuration:
config/packages/calendar.yaml:
calendar:
default_view: 'week' # Override default view
max_events_per_day: 10 # Limit events per day
EventProviderInterface to lazy-load events for large datasets.CalendarManager in tests:
$this->mockBuilder()
->disableOriginalConstructor()
->getMock()
->method('getEvents')
->willReturn([$mockEvent]);
EventType form with Symfony\Component\Form\Extension\Core\Type\FormType for manual field mapping.How can I help you explore Laravel packages today?