melifaro / melifaro-booking-bundle
Adds some booking functionality to your Symfony 2 project
Installs: 498
Dependents: 0
Suggesters: 0
Security: 0
Stars: 37
Watchers: 7
Forks: 13
Open Issues: 3
Type:symfony-bundle
Requires
- php: >=5.3.2
- doctrine/doctrine-bundle: ~1.1
- doctrine/orm: >=2.2,<2.5-dev
- symfony/browser-kit: ~2.3
- symfony/filesystem: ~2.3
- symfony/finder: ~2.3
- symfony/framework-bundle: ~2.3
- symfony/options-resolver: ~2.3
- symfony/twig-bundle: ~2.3
- twig/extensions: ~1.0
- twig/twig: ~1.5
Requires (Dev)
- doctrine/doctrine-fixtures-bundle: dev-master
- phpunit/phpunit: ~3.7
Suggests
- doctrine/mongodb-odm: 1.0.*@dev
This package is auto-updated.
Last update: 2022-02-01 12:34:35 UTC
README
Booking Bundle for Symfony 2 Applications. Bundle provides some useful functionality for handling bookings on your website.
Installation
1. Download
Prefered way to install this bundle is using composer
Download the bundle:
$ php composer.phar require "melifaro/melifaro-booking-bundle:dev-master"
2. Add it to your Kernel:
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Melifaro\BookingBundle\MelifaroBookingBundle(), ); }
3. Create your entity
Doctrine ORM
Bundle has all necessary mappings for your entity. Just create your entity class and extend it from
Melifaro\BookingBundle\Entity\Booking
, create your id
field and setup proper relation for
item you want to be booked.
<?php namespace Vendor\Bundle\Entity; use Melifaro\BookingBundle\Entity\Booking as BaseClass; /** * Booking * * @ORM\Entity() * @ORM\Table(name="booking") */ class Booking extends BaseClass { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var \Vendor\Bundle\Entity\BookableItem * * @ORM\ManyToOne(targetEntity="BookableItem", inversedBy="bookings") * @ORM\JoinColumn(name="property_id", referencedColumnName="id") */ protected $item; // Don't forget about getters and setters }
Now we are ready to rock!
Booker Service
Core component of this bundle is booker service. You can get it in your controller by using
<?php public function bookingAction() { $this->get('booker'); /** @var \Melifaro\BookingBundle\Helper\Booker */ }
Booker Service has following methods:
isAvailableForPeriod($item, \DateTime $start, \DateTime $end)
Checks is your item available for period,
returns boolean
isAvailableForDate($item, \DateTime $date)
Checks is your item available for date, returns boolean
whereAvailableForPeriod(QueryBuilder $queryBuilder, $join, \DateTime $start, \DateTime $end)
Updates your
QueryBuilder
and returns the same QueryBuilder
object with added join and where clause.
Note:
$join
isarray('field', 'alias')
whereAvailableForDate(QueryBuilder $queryBuilder, $join, \DateTime $date)
Updates your
QueryBuilder
and returns the same QueryBuilder
object with added join and where clause.
Note:
$join
isarray('field', 'alias')
book($item, \DateTime $start, \DateTime $end)
Books your item returns Entity | false
(Entity
on success, false
on failure)
Calendar Twig Extension
Bundle also provides cool Twig extension. To use it in your template just try following:
{{ melifaro_booking_calendar(item, "now", 4) }}
Where
item
- is object of your bookable item
now
- is any date allowed for \DateTime::__construct()
4
- number of months to be rendered after desired date
Overriding template
Template can be overridden as usual in Symfony 2 application. Just create following directory structure:
app/Resources/views/MelifaroBookingBundle/Calendar/month.html.twig