slad/slad-booking-bundle

为您的Symfony 2项目添加一些预订功能

V2.0 2016-10-18 16:27 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:26:11 UTC


README

该项目是从 melifaro/melifaro-booking-bundle 分支出来的。将会对代码进行修改以匹配汽车租赁业务

Symfony 2应用的预订功能包。Bundle提供了处理网站预订的一些有用功能。

安装

1. 下载

推荐使用 composer 安装此bundle

下载bundle

$ php composer.phar require "slad/slad-booking-bundle:dev-master"

2. 添加到您的Kernel

<?php

// app/AppKernel.php


public function registerBundles()
{
    $bundles = array(
        // ...

        new Slad\BookingBundle\SladBookingBundle(),
    );
}

3. 创建您的实体

Doctrine ORM

Bundle已经为您的实体提供了所有必要的映射。只需创建您的实体类并从 Slad\BookingBundle\Entity\Booking 继承,创建您的 id 字段并为要预订的项目设置合适的关联。

<?php

namespace Vendor\Bundle\Entity;

use Slad\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
}

4. 在config.yml中配置预订bundle

# Booking
slad_booking:
    entity_class:   AppBundle\Entity\Booking

现在我们准备好大显身手了!

预订者服务

此bundle的核心组件是预订者服务。您可以在控制器中使用以下方式获取它

<?php

public function bookingAction()
{
    $this->get('booker'); /** @var \Slad\BookingBundle\Helper\Booker */
}

预订者服务有以下方法

isAvailableForPeriod($item, \DateTime $start, \DateTime $end) 检查项目在指定时间段内是否可用,返回 boolean

isAvailableForDate($item, \DateTime $date) 检查项目在指定日期是否可用,返回 boolean

whereAvailableForPeriod(QueryBuilder $queryBuilder, $join, \DateTime $start, \DateTime $end) 更新您的 QueryBuilder 并返回添加了连接和where子句的相同 QueryBuilder 对象。

注意: $joinarray('field', 'alias')

whereAvailableForDate(QueryBuilder $queryBuilder, $join, \DateTime $date) 更新您的 QueryBuilder 并返回添加了连接和where子句的相同 QueryBuilder 对象。

注意: $joinarray('field', 'alias')

book($item, \DateTime $start, \DateTime $end) 预订项目返回 Entity | false (Entity 表示成功,false 表示失败)

日历Twig扩展

Bundle还提供了酷炫的Twig扩展。要在模板中使用它,只需尝试以下方法

{{ slad_booking_calendar(item, "now", 4) }}

在哪里

item - 是您的可预订项目的对象

now - 是允许的任何日期,适用于 \DateTime::__construct()

4 - 在目标日期之后渲染的月份数量

覆盖模板

在Symfony 2应用程序中,模板可以像通常一样被覆盖。只需创建以下目录结构

app/Resources/views/SladBookingBundle/Calendar/month.html.twig