jhavenz/nova-extended-fields

适用于 Laravel Nova 的特定字段类型

0.0.6 2022-07-22 09:09 UTC

This package is auto-updated.

Last update: 2024-09-24 02:59:33 UTC


README

基于文件的字段用于 Laravel Nova

重要:此软件包仍在开发/预发布模式。请勿在生产环境中使用。

我个人不喜欢在 Nova 期望的 'fields' 数组中配置所有 Nova 字段。

此外,Nova 项目中使用的字段大多有很多共同点...

那么,除了为每个项目重复所有这些逻辑,还需要为每个字段配置一个数组,并且每次都需要(视觉上)解析所有字段以找到你想要的字段之外,还有没有更好的方法?这正是这个软件包旨在解决的问题。

因此,在你的 Nova 项目中,不再是这样的

<?php

namespace App\Nova\Resources;

use Laravel\Nova\Fields\Text;

class NovaUser extends Resource
{
    //...
    
    public function fields(NovaRequest $request): array
    {
        return [
            Text::make('Full Name')
                ->sortable()
                ->rules('required', 'string', 'min:6', 'max:25', function ($attr, $value, $fail) {
                    if (!(filled($value) && is_string($value))) {
                        return;
                    }
    
                    preg_match('#\s#', $value, $whitespaceMatches);
    
                    if (empty($whitespaceMatches)) {
                        $fail("Full name must contain a first and last name with a space in between");
                    }
                    
                    //etc.
                }),
                
            // ...other fields
        ];
    }
}

fyi...rescueQuietly()只是我从jh-laravel-helpers软件包中提供的辅助函数

而是变成这样

use App\Nova\Resources\Fields\Internet\Name;

namespace App\Nova\Resources;

use Laravel\Nova\Fields\Text;

class NovaUser extends Resource
{
    public function fields(NovaRequest $request): array
    {
        return [
            FullName::field(),
            
            // ...other fields
        ];
    }
}

aahhh 🤗,这样好多了!

让我们深入了解一下...

安装

您可以通过 composer 安装此软件包

composer require jhavenz/nova-extended-fields

配置

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="nova-extended-fields"

通用用法和配置

如前所述,每个扩展字段现在都有自己的类,并且可以使用此软件包的配置文件轻松配置。

正如您将看到的,我在配置文件中列出了一些合理的默认值。您可以根据应用程序的需求更改任何配置。

此外,您会注意到,在实例化字段时,始终使用静态 ::field() 方法。这是因为每个扩展字段在容器中都有自己的绑定,由其相应的类字符串绑定。例如,可以使用 app(FullName::class) 解析 FullName 字段,依此类推。

如果您需要完全重新配置字段解析方式,可以根据您的需要覆盖任何/所有绑定(尽管大多数情况下不需要这样做)。

注意:您可以查看测试用例以获取示例

高级用法

在需要超出我们通过配置文件或 ::fields() 参数可以传递的能力的自定义逻辑的情况下,您可以扩展此软件包中的任何字段,并开始编写自己的自定义逻辑。这也打开了很多大门!

一个例子就是需要在你的一些字段上使用自定义 fillUsing 逻辑。

这看起来可能像这样

<?php

namespace App\Nova\Resources\Fields\Shared;

use Jhavenz\NovaExtendedFields\Fields\Named\FullName;

class MyAppFullName extends FullName
{
    /**
     * Maybe our database only has [first_name] and [last_name] columns. 
     * So we need to split the full name before saving it the database...
     */
    protected function fillAttributeFromRequest(NovaRequest $request, $requestAttribute, $model, $attribute)
    {
        [$firstName, $lastName] = $request->input($requestAttribute);
          
        $model->first_name = $firstName;
        $model->last_name = $lastName;
        
        # Note:
        # Laravel will call the save() method automatically after this method completes
    }
}

提示:Fields 实例上有很多其他方法,一旦知道我们正在处理特定类型的字段,就可以覆盖这些方法,这有助于显著减少代码中的重复!

在可能有两个不同的模型共享相同字段的情况下,为每个模型创建一个特定文件会有所帮助。例如,UserEmail 字段可能有其特定的需求/逻辑,而 CompanyEmail 字段则不然。为这些模型中的每个模型创建一个文件,允许您编写针对每个模型的特定逻辑。然后,您可以使用这些字段作为您所有 Nova 项目的可信来源!

开发者注意

我最近才开始(截至 2022 年 7 月)提取我在自己的 Nova 项目中使用的通用字段,但最终我计划将所有内容都移入此软件包。您将在此处找到许多通用字段,我也欢迎更多贡献!

以下列出的字段是不完整的列表:

  • FullName
  • FirstName
  • LastName
  • Email
  • NumericPrimaryKey
  • UsersRole(基于一个非常基础的授权系统)
  • UserPassword
  • UserPasswordConfirmation
  • Avatar

自撰写以来可能已经添加了更多字段。

测试

composer test

变更日志

请参阅变更日志以获取最近更改的更多信息。

贡献

欢迎所有贡献!

安全漏洞

如果在任何情况下发现安全漏洞,请尽快通过电子邮件mail@jhavens.tech通知我

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。