jhavenz / nova-extended-fields
适用于 Laravel Nova 的特定字段类型
Requires
- php: ^8.1
- illuminate/contracts: ^9.0
- jhavenz/jh-laravel-helpers: 0.0.*
- jhavenz/models-collection: ^0.0.5
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- nunomaduro/collision: ^6.0
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.29
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
- NumericPrimaryKey
- UsersRole(基于一个非常基础的授权系统)
- UserPassword
- UserPasswordConfirmation
- Avatar
自撰写以来可能已经添加了更多字段。
测试
composer test
变更日志
请参阅变更日志以获取最近更改的更多信息。
贡献
欢迎所有贡献!
安全漏洞
如果在任何情况下发现安全漏洞,请尽快通过电子邮件mail@jhavens.tech
通知我
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。