thisvessel/carbonated

该软件包已被废弃且不再维护。未建议替代软件包。

一个提供更多灵活时间戳/日期/时间处理的 Eloquent 模型特性。

dev-master 2015-10-20 13:16 UTC

This package is not auto-updated.

Last update: 2020-05-30 16:04:31 UTC


README

免责声明:这是一个正在进行中的工作!自行承担风险!当我对我使用的API和测试覆盖率满意时,我将打标签版本。欢迎提出建议 :)

Build Status Coverage Status

一个提供灵活时间戳/日期/时间处理的 Eloquent 模型特性。

Eloquent 通过 日期转换器 提供日期时间处理。然而,在您的客户端中设置访问器以进行自定义日期时间格式化,以及转换器以纠正进入数据库的自定义日期时间格式可能会很麻烦。Carbonated旨在帮助您处理这些问题。

功能概述

  • 为时间戳、日期和时间字段提供自动访问器和转换器。
  • 在模型中一次性设置输出格式。
  • 无需为每个属性输出进行format()
  • 当您需要format()输出时,Carbon实例仍然可用。
  • 支持时区,并可在数据库和前端之间自动转换。
  • 与使用模型绑定表单生成器友好协作。

要求

安装

通过 Composer

composer require 'thisvessel/carbonated:dev-master'

注意:我将在添加足够的测试覆盖率后打标签版本。

基本用法

在您的 Eloquent 模型中使用 Carbonated 特性。

<?php namespace App;

use ThisVessel\Carbonated;

class ServiceOrder extends Model {

    use Carbonated;

}

将时间戳、日期和时间字段添加到相应的碳化模型属性中。

public $carbonatedTimestamps = ['created_at', 'updated_at'];
public $carbonatedDates = ['required_by', 'completed_on', 'invoiced_on'];
public $carbonatedTimes = ['pickup_time'];

就是这样!访问器和转换器会自动应用,并具有适合前端的有意义格式。

{{ $serviceOrder->created_at }}  // Outputs 'Jun 09, 2015 4:10pm'.
{{ $serviceOrder->required_by }} // Outputs 'Jul 30, 2015'.
{{ $serviceOrder->pickup_time }} // Outputs '10:30am'.

如果您需要访问原始 Carbon 实例,则 withCarbon 属性返回一个具有 Carbon 实例而不是格式化字符串的对象副本。

{{ $serviceOrder->withCarbon->required_by->format('M Y') }}

定制

通过将以下属性添加到您的模型中来自定义视图输出格式。

public $carbonatedTimestampFormat = 'M d, Y g:ia';
public $carbonatedDateFormat = 'M d, Y';
public $carbonatedTimeFormat = 'g:ia';

通过将以下属性添加到您的模型中来自定义 JSON 输出格式。

public $jsonTimestampFormat = 'Y-m-d H:i:s';
public $jsonDateFormat = 'Y-m-d';
public $jsonTimeFormat = 'H:i:s';

通过将以下属性添加到您的模型中来自定义数据库存储格式。

public $databaseTimestampFormat = 'Y-m-d H:i:s';
public $databaseDateFormat = 'Y-m-d';
public $databaseTimeFormat = 'H:i:s';

您还可以通过在您的模型中提供自己的访问器和转换器方法来覆盖所有自动访问器和转换器。

public function getRequiredByAttribute($value)
{
    return $value; // Returns raw value from database.
}

时区转换

Carbonated 支持在数据库和前端之间自动进行时区转换。例如,您可能已在数据库中以 UTC 存储时间,但希望输出为 America/Toronto

您可以通过在模型中添加这些属性来显式设置时区。

public $carbonatedTimezone = 'America/Toronto';
public $jsonTimezone = 'UTC';
public $databaseTimezone = 'UTC';

如果模型中没有定义 $carbonatedTimezone,Carbonated 将搜索具有 $timezone 属性的已认证用户。这允许用户模型负责用户特定的时区。

public $timezone = 'America/Toronto;'

可以使用 访问器 动态设置上述属性,而不是显式属性。

public function getTimezoneAttribute()
{
    return 'America/Toronto';
}

如果 $carbonatedTimezone$jsonTimezone 没有定义,将使用 $databaseTimezone 作为后备。

如果 $databaseTimezone 未定义,将使用应用程序的时区(在 /config/app.php 中找到)作为后备。

如果您在 Laravel 之外使用 Carbonated 与 Eloquent,则 $databaseTimezone 将回退到 UTC