ZF2表单验证 - 不重叠的日期和时间

时间:2014-06-18 07:47:48

标签: php html5 validation zend-framework2

我目前正在使用ZF2开发会议系统。我为此使用了两种模式,叫做“会议”。和' meetingTime'。 会议与MeetingTime有一对多的关系。

会议包含与日期/时间相关的以下字段:

public $slotDuration;
public $meetingTimes;

SlotDuration是每分钟的会议时间。 MeetingTimes包含MeetingTime对象。

MeetingTime具有以下与日期/时间相关的字段:

    public $slots;
    public $dateTimeStart;

广告位是这个'块中的会议数量。会议DateTimeStart是不言自明的。为了确定此会议的结束时间,我们采用插槽持续时间并将其乘以此会议时间对象中的插槽数量。由于每个会议块可能在不同的时间结束,因此这在会议时间对象中完成。然后将结果转换为DateTime对象。

在创建表单中,如果用户认为有必要,我们会为meetingTimes动态添加新的字段集。我们的业务模式尽可能灵活,因此用户可能会在会议之间暂停或在需要时延长多天。每个字段集包含一个用于开始日期和时间的HTML5 DateTime元素,一个用于插槽的HTML5 Number元素和一个用于保留房间的选择框。这些字段集包含在另一个字段集中,包含在表单中。

现在,我的问题是,关于验证,我如何确保这些时间中没有一个重叠(它们必须是连续的)?我在将信息发送到数据库之前在控制器中创建对象,这可能是有用的。 我希望我可以使用ZF2验证管道,但如果不可能,我可以开放任何其他解决方案。

编辑: 顺便说一句,表格看起来像这样。 http://puu.sh/9yJri/12422b8231.png

1 个答案:

答案 0 :(得分:0)

如果没有更多信息,我无法正确编写,但您需要编写一个自定义验证器,它有点像这样:

LocationAvailabilityValidator.php

    <?php
    namespace MeetingModuleThang\Validator;

    use Zend\Validator\AbstractValidator;

    class LocationAvailabilityValidator extends AbstractValidator

    /**
 * (non-PHPdoc)
 * @see Zend\Validator.ValidatorInterface::isValid()
 */
public function isValid($value, $context=array())
{
          //Get the location object from db by name
          $location = $this->getObjectManager()->findByName('\Application\Entity\Location', $context['location']);

          //Get your datetime of end properly this is likely ridiculous
          // But I don't know the metrics and types you are using 
          $endTime = $value + $slotDuration;

          $meetingStartDateTime = DateTime::createFromFormat($yourFormat, $value);
          $meetinEndDateTime = DateTime::createFromFormat($yourFormat, $endTime);

          return $location->isAvailableBetween($meetingStart, $meetingEnd);
    }

然后,您可以检查位置方法,如果db

中存在该对象的插槽