Installation
composer require edemy/bookingbundle
Ensure eDemyFramework is installed and configured as a base dependency.
Bundle Registration
Add to config/bundles.php:
return [
// ...
Edemy\BookingBundle\EdemyBookingBundle::class => ['all' => true],
];
First Use Case: Basic Booking Entity
Create a booking entity (e.g., src/Entity/Booking.php):
namespace App\Entity;
use Edemy\BookingBundle\Entity\Booking as BaseBooking;
class Booking extends BaseBooking
{
// Extend or override base methods
}
Database Migration
Run migrations (check src/Resources/migrations for default schema):
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
Basic CRUD via Controller
use Edemy\BookingBundle\Controller\BookingController;
class AppBookingController extends BookingController
{
// Override actions as needed
}
Booking Creation
Use the BookingManager service to handle business logic:
$booking = $this->get('edemy_booking.manager')->create([
'user_id' => $user->getId(),
'service_id' => $service->getId(),
'start_at' => $startDateTime,
'end_at' => $endDateTime,
]);
Validation & Rules
Extend Edemy\BookingBundle\Validator\Constraints\Booking for custom rules:
# config/validation.yml
App\Entity\Booking:
constraints:
- Edemy\BookingBundle\Validator\Constraints\Booking:
maxOverlap: 3
minDuration: 3600
Recurring Bookings
Use the RecurringBooking trait in your entity:
use Edemy\BookingBundle\Entity\RecurringBooking;
class Booking extends BaseBooking implements RecurringBooking
{
// Implement recurring logic
}
Integration with eDemy Framework
eDemyFramework\UserBundle for authentication:
$user = $this->get('e_demy.user.context')->getUser();
BookingCreatedEvent):
$dispatcher->addListener('booking.created', function($event) {
// Custom logic
});
API Endpoints Use FOSRestBundle or API Platform for RESTful endpoints:
# config/routes/edemy_booking.yaml
edemy_booking:
resource: "@EdemyBookingBundle/Resources/config/routing.yml"
type: rest
prefix: /api/bookings
Missing eDemy Framework Dependencies
eDemyFramework/UserBundle and eDemyFramework/CoreBundle are installed.Class 'Edemy\BookingBundle\DependencyInjection\EdemyBookingExtension' not found → Verify bundle registration order.Timezone Handling
config/packages/edemy_booking.yaml:
edemy_booking:
timezone: 'Europe/Paris'
date_default_timezone_get() to verify.Recurring Booking Conflicts
BookingManager:
$manager->setOverlapValidationMode('skip'); // or 'merge'
Doctrine ORM Conflicts
BaseBooking, ensure your entity annotations match the bundle’s schema:
/** @ORM\Table(name="bookings") */
/** @ORM\InheritanceType("SINGLE_TABLE") */
Caching Issues
php bin/console cache:clear
Enable Debug Mode:
# config/packages/dev/edemy_booking.yaml
edemy_booking:
debug: true
Logs booking operations to var/log/edemy_booking.log.
SQL Logging:
php bin/console doctrine:query:sql "SELECT * FROM bookings"
Custom Booking States
Extend the BookingState enum:
namespace App\Entity;
use Edemy\BookingBundle\Entity\BookingState as BaseState;
class BookingState extends BaseState
{
public const CANCELLED_BY_ADMIN = 'cancelled_by_admin';
}
Payment Integration
Hook into BookingPaidEvent:
$dispatcher->addListener('booking.paid', function($event) {
$this->get('payment.gateway')->process($event->getBooking());
});
Frontend Templates
Override Twig templates in templates/bundles/EdemyBookingBundle/:
{# templates/bundles/EdemyBookingBundle/Booking/calendar.html.twig #}
{% extends 'EdemyBookingBundle::Booking/calendar.html.twig' %}
CLI Commands
Create custom commands by extending Edemy\BookingBundle\Command\AbstractBookingCommand:
namespace App\Command;
use Edemy\BookingBundle\Command\AbstractBookingCommand;
class SyncBookingsCommand extends AbstractBookingCommand
{
protected function configure()
{
$this->setName('app:booking:sync');
}
}
How can I help you explore Laravel packages today?