qskousen / calculated-field
为 Laravel Nova 提供的服务器端计算字段
Requires
- php: ^7.3|^8.0
This package is not auto-updated.
Last update: 2024-09-20 12:35:31 UTC
README
来自 Qskousen 的说明
我已经将这个包更新为支持 Nova 4,所有的功劳仍属于 codebykyle,他们在原始工作中做出了贡献: https://github.com/codebykyle/calculated-field
变更
移除了对过时的 numeral
包的依赖。取而代之,它将使用 Intl.NumberFormat 进行格式化。
鉴于这一点,->numberFormat()
函数签名已更改为 ->numberFormat($format, $locale = 'en-US')
,其中 $format
是来自 Intl.NumberFormat
的有效格式 JSON 字符串(如上所述),例如,->numberFormat("{style: 'currency', currency: 'usd'}")
。在这种情况下,地区设置为默认值 en-US
。
格式化仅在特定场景下有效。除了在只读监听器字段上外,效果并不理想。我认为这并没有在 codebykyle 的版本中完全实现,这可能是为什么它没有出现在说明书中。结果可能会有所不同。
原始说明如下
本包包含两个 Nova 字段,用于从 Nova 客户端进行服务器端计算。用户可以选择在表单中覆盖计算值。
有关此字段的如何使用和为什么使用,请访问
https://codebykyle.com/blog/laravel-nova-custom-calculated-field
安装
通过 composer 安装包
composer require codebykyle/calculated-field
示例
例如
作为数字
作为字符串
默认
监听器字段默认将传入的所有数字相加
用法
<?php use Codebykyle\CalculatedField\BroadcasterField; use Codebykyle\CalculatedField\ListenerField; class MyResource extends Resource { public function fields(Request $request) { return [ BroadcasterField::make('Sub Total', 'sub_total'), BroadcasterField::make('Tax', 'tax'), ListenerField::make('Total Field', 'total_field') ]; } }
覆盖回调
<?php use Codebykyle\CalculatedField\BroadcasterField; use Codebykyle\CalculatedField\ListenerField; class MyResource extends Resource { public function fields(Request $request) { return [ BroadcasterField::make('Sub Total', 'sub_total'), BroadcasterField::make('Tax', 'tax'), ListenerField::make('Total Field', 'total_field') ->calculateWith(function (Collection $values) { $subtotal = $values->get('sub_total'); $tax = $values->get('tax'); return $subtotal + $tax; }), ]; } }
字符串字段
<?php use Codebykyle\CalculatedField\BroadcasterField; use Codebykyle\CalculatedField\ListenerField; class MyResource extends Resource { public function fields(Request $request) { return [ BroadcasterField::make('First Name', 'first_name') ->setType('string'), BroadcasterField::make('Last Name', 'last_name') ->setType('string'), ListenerField::make('Full Name', 'full_name') ->calculateWith(function (Collection $values) { return $values->values()->join(' '); }), ]; } }
多个计算字段
<?php use Codebykyle\CalculatedField\BroadcasterField; use Codebykyle\CalculatedField\ListenerField; class MyResource extends Resource { public function fields(Request $request) { return [ BroadcasterField::make('Sub Total', 'sub_total') ->broadcastTo('total'), BroadcasterField::make('Tax', 'tax') ->broadcastTo('total'), ListenerField::make('Total Field', 'total_field') ->listensTo('total') ->calculateWith(function (Collection $values) { $subtotal = $values->get('sub_total'); $tax = $values->get('tax'); return $subtotal + $tax; }), BroadcasterField::make('Senior Discount', 'senior_discount') ->broadcastTo('discount'), BroadcasterField::make('Coupon Discount', 'coupon_amount') ->broadcastTo('discount'), ListenerField::make('Total Discount', 'total_discount') ->listensTo('discount') ->calculateWith(function (Collection $values) { $seniorDiscount = $values->get('senior_discount'); $couponAmount = $values->get('coupon_amount'); return $seniorDiscount + $couponAmount; }) ]; } }