codephix/ical

eluceo/iCal 包提供创建 iCalendars 的抽象层。您可以通过使用 PHP 对象而不是手动编写 *.ics 文件来轻松创建 iCal 文件。输出将尽可能遵循 RFC 5545。

2.0 2023-03-10 15:50 UTC

This package is auto-updated.

Last update: 2024-09-10 18:59:18 UTC


README

Continuous Integration codecov Psalm coverage License Latest Stable Version Monthly Downloads Infection MSI

此包提供创建 iCalendars 文件的抽象层。通过使用此 PHP 包,您可以在不了解底层格式的情况下创建 *.ics 文件。输出本身将尽可能遵循RFC 5545

浏览项目

安装

您可以通过运行以下命令使用 Composer 安装此包

composer require eluceo/ical

版本 / 升级

最初版本于 2012 年发布。此包的版本 2 是对该包的完整重写,与旧版本不兼容。如果您想从版本 0.* 迁移到 2.*,请参阅升级指南。如果您刚开始使用此包,应安装版本 2。

文档

请访问 ical.poerschke.nrw 以获取完整文档。

用法

此包中的类分为两个命名空间

  • Domain 包含关于事件的信息。
  • Presentation 包含将 Domain 转换为 *.ics 文件的过程。

要创建日历,第一步是创建相应的领域对象。然后,可以将这些对象转换为 iCalendar PHP 表示形式,并将其转换为字符串。

空事件

在此基本示例中,将渲染一个空事件。您将了解如何创建事件领域对象,如何将其添加到日历中,以及如何将其转换为 iCalendar 组件。

1. 创建事件领域实体

$event = new \Eluceo\iCal\Domain\Entity\Event();

2. 创建日历领域实体

$calendar = new \Eluceo\iCal\Domain\Entity\Calendar([$event]);

3. 将日历领域对象转换为表示对象

$iCalendarComponent = (new \Eluceo\iCal\Presentation\Factory\CalendarFactory())->createCalendar($calendar);

4. a) 保存到文件

file_put_contents('calendar.ics', (string) $iCalendarComponent);

4. b) 通过 HTTP 发送

header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="cal.ics"');

echo $iCalendarComponent;

完整示例

以下示例将创建一个包含摘要和描述的单日事件。更多示例可以在 examples/ 文件夹中找到。

<?php

require_once __DIR__ . '/../vendor/autoload.php';

// 1. Create Event domain entity
$event = (new Eluceo\iCal\Domain\Entity\Event())
    ->setSummary('Christmas Eve')
    ->setDescription('Lorem Ipsum Dolor...')
    ->setOccurrence(
        new Eluceo\iCal\Domain\ValueObject\SingleDay(
            new Eluceo\iCal\Domain\ValueObject\Date(
                \DateTimeImmutable::createFromFormat('Y-m-d', '2030-12-24')
            )
        )
    );

// 2. Create Calendar domain entity
$calendar = new Eluceo\iCal\Domain\Entity\Calendar([$event]);

// 3. Transform domain entity into an iCalendar component
$componentFactory = new Eluceo\iCal\Presentation\Factory\CalendarFactory();
$calendarComponent = $componentFactory->createCalendar($calendar);

// 4. Set headers
header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="cal.ics"');

// 5. Output
echo $calendarComponent;

许可

此包根据 MIT 许可证 发布。