aiskander/calendar-holidays-bundle
Install the Bundle
composer require aiskander/calendar-holidays-bundle
Ensure your composer.json aligns with the package's PHP/Symfony version constraints (e.g., Symfony 3.4/4.0, PHP 7.0+).
Register the Bundle
AppKernel.php:
new \Aiskander\CalendarHolidaysBundle\AiskanderCalendarHolidaysBundle(),
config/bundles.php:
\Aiskander\CalendarHolidaysBundle\AiskanderCalendarHolidaysBundle::class => ['all' => true],
Import Routes
Add to config/routes.yaml:
aiskander_calendar_holidays:
resource: "@AiskanderCalendarHolidaysBundle/Resources/config/routing.yml"
First Use Case: Check a Holiday Inject the service into a controller or service:
use Aiskander\CalendarHolidaysBundle\Service\HolidayService;
class MyController extends AbstractController {
public function checkHoliday(HolidayService $holidayService) {
$isHoliday = $holidayService->isHoliday(new \DateTime('2023-12-25'));
return new Response($isHoliday ? 'Holiday!' : 'Workday');
}
}
Holiday Validation
Use HolidayService to check dates:
$holidayService->isHoliday(\DateTime::createFromFormat('Y-m-d', '2023-01-01')); // New Year's Day
Fetching Holidays for a Year Retrieve all holidays for a specific year (e.g., Egypt-specific):
$holidays = $holidayService->getHolidays(2023);
// Returns array of \DateTime objects or holiday entities.
Custom Holiday Regions
The bundle appears Egypt-focused (per composer.json keywords). Extend for other regions by:
HolidayProvider service.Doctrine Integration
Holidays are stored in Doctrine entities (per doctrine/orm dependency). Query via repository:
$holidayRepo = $this->getDoctrine()->getRepository(Holiday::class);
$holidays = $holidayRepo->findByYear(2023);
{% if app.service('aiskander_calendar_holidays.holiday_service').isHoliday(date) %}
<p>Holiday: {{ date|date('l, F j') }}</p>
{% endif %}
HolidayCommand (if exposed) to bulk-add holidays:
php bin/console aiskander:holidays:add 2023-01-01 "New Year's Day"
// config/services.yaml
App\EventListener\HolidayListener:
tags:
- { name: kernel.event_listener, event: aiskander.holiday, method: onHoliday }
Incomplete Documentation
src/Service/HolidayService.php and src/Entity/Holiday.php for undocumented methods.Doctrine Dependency
Holiday). If you’re not using Doctrine, this bundle is incompatible.Region-Specific Data
composer.json keywords). Overriding this requires custom logic (see Extension Points).Routing Conflicts
routing.yml). Ensure they don’t clash with your existing routes:
# config/routes.yaml
aiskander_calendar_holidays:
resource: "@AiskanderCalendarHolidaysBundle/Resources/config/routing.yml"
prefix: /api/holidays # Avoid conflicts
Check Service Availability:
php bin/console debug:container | grep aiskander
Verify aiskander_calendar_holidays.holiday_service is registered.
Database Issues: If holidays aren’t loading, check:
php bin/console doctrine:migrations:status).src/Entity/Holiday.php).Date Handling:
The bundle likely uses DateTime objects. Ensure your input dates match:
$holidayService->isHoliday(new \DateTime('2023-12-25')); // Correct
$holidayService->isHoliday('2023-12-25'); // May fail (type mismatch)
Custom Holiday Provider
Override the default provider in config/services.yaml:
services:
aiskander_calendar_holidays.holiday_provider:
class: App\Service\CustomHolidayProvider
arguments:
- '@doctrine.orm.entity_manager'
Implement Aiskander\CalendarHolidaysBundle\Provider\HolidayProviderInterface.
Adding New Holiday Types
Extend the Holiday entity (e.g., add isPublicHoliday field):
// src/Entity/Holiday.php
class Holiday {
// ...
private bool $isPublic = false;
// Add getter/setter and update migrations.
}
Localization The bundle lacks i18n support. Add translations manually:
# config/packages/translation.yaml
imports:
- { resource: '%kernel.project_dir%/config/holidays/translations.yaml' }
No config/packages/ Setup:
The bundle doesn’t include a default config/packages/aiskander_calendar_holidays.yaml. Create one if you need customization:
# config/packages/aiskander_calendar_holidays.yaml
aiskander_calendar_holidays:
default_region: 'eg' # Hypothetical config key (check source)
Environment-Specific Holidays:
Load holidays dynamically based on environment (e.g., APP_ENV):
// src/Service/CustomHolidayProvider.php
public function getHolidays(int $year): array {
if ($_ENV['APP_ENV'] === 'prod') {
return $this->fetchFromDatabase($year);
}
return $this->fetchFromTestData($year);
}
How can I help you explore Laravel packages today?