wdelfuego/nova-datetime

简化Laravel Nova 4中DateTime字段工作的包

v1.1.2 2022-07-18 20:57 UTC

This package is auto-updated.

Last update: 2024-09-19 01:55:15 UTC


README

此包添加了一个支持全局DateTime格式的DateTime字段,为单独的DateTime字段提供了语法糖,并为索引视图提供了强大的日期过滤器。它可以作为在Laravel的Nova 4中处理DateTime字段和逻辑的扩展和改进的基础。

安装

composer require wdelfuego/nova-datetime

用法

全局格式化DateTime字段

  1. 首先,通过运行以下命令发布此包的配置文件:

    php artisan vendor:publish --provider="Wdelfuego\Nova\DateTime\ServiceProvider"
  2. 然后,在config/nova-datetime.php中设置您想要用于所有DateTime字段的自定义格式,例如

    return [
        'globalFormat' => 'Y-M-d H:i:s',
    ];
    
  3. 在您的Nova资源中,通过添加此use语句将所有Laravel\Nova\Fields\DateTime实例替换为Wdelfuego\Nova\DateTime\Fields\DateTime实例

    use Wdelfuego\Nova\DateTime\Fields\DateTime;
    

这允许您自动将全局格式应用到您自己的Nova资源中的所有DateTime字段。

要自动将全局DateTime格式应用到资源操作日志中“操作发生时间”列,请安装wdelfuego/nova-actions包。

格式化单独的DateTime字段

以下示例假设用于Nova资源的Eloquent模型有一个名为'attribute'的属性。

withDateFormat辅助函数会自动添加到您的项目中所有DateTime字段(包括Nova自带的,因此您不需要使用自定义DateTime字段),并允许您直接设置字段的显示格式

    DateTime::make(__('Localized label'), 'attribute')
        ->withDateFormat('d-M-Y, H:i'),

这是一个简单的语法糖,基于从Nova 4.2.4开始工作的displayUsing方法。

通过DateTime字段筛选资源

您可以使用Laravel的本地filterable方法在您的DateTime字段上进行标准日期范围筛选,或使用以下日期筛选器中的任何组合,为最终用户提供从索引视图筛选Nova资源的有力方式。

  • OnDate仅显示与特定日期匹配的DateTime字段项
  • NotOnDate仅显示DateTime字段不在特定日期的项
  • AfterDate仅显示DateTime字段在特定日期之后的项
  • AfterOrOnDate仅显示DateTime字段在特定日期之后或该日期的项
  • NotAfterDate仅显示DateTime字段不在特定日期之后的项(这是BeforeOrOnDate的完全等价别名)
  • BeforeDate仅显示DateTime字段在特定日期之前的项
  • BeforeOrOnDate仅显示DateTime字段在特定日期之前或该日期的项
  • NotBeforeDate仅显示DateTime字段不在特定日期之前的项(这是AfterOrOnDate的完全等价别名)

您可以将这些筛选器的组合添加到Nova资源中,允许最终用户定义日期范围。

例如,您可以创建一个标准日期范围筛选器,允许用户排除特定日期,如下所示

use Wdelfuego\Nova\DateTime\Filters\AfterDate;
use Wdelfuego\Nova\DateTime\Filters\BeforeDate;
use Wdelfuego\Nova\DateTime\Filters\NotOnDate;
    public function filters(NovaRequest $request)
    {
        return [
            new AfterDate(__('After'), 'attribute'),
            new BeforeDate(__('Before'), 'attribute'),
            new NotOnDate(__('But not on'), 'attribute'),
        ];
    }

您还可以仅使用单个OnDate筛选器进行特定日期筛选,或通过添加单个AfterBefore筛选器强制进行开放式范围筛选。

支持

对于您可能遇到的问题、疑问或意见,请于GitHub上提交一个issue。