binary-cats / laravel-sku
为Eloquent模型生成SKU
Requires
- php: ^7.2|^8.0
- illuminate/support: ~5.6|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^3.6|^4.0|^5.0|^6.0|^7.0|^8.0
- phpunit/phpunit: ^7.0|^8.2|^9.0|^10.0
Suggests
- binary-cats/laravel-lob-webhooks: Handle Lob.com webhooks in your Laravel application
- binary-cats/laravel-mailgun-webhooks: Handle Mailgun webhooks in your Laravel application
README
处理模型SKU
在保存任何Eloquent模型时生成唯一的SKU。
$model = new EloquentModel(); $model->name = 'Laravel is Awesome'; $model->save(); echo $model->sku; // ouputs "LAR-80564492"
该包将为Laravel的Illuminate\Support\Str::sku()
类添加一个新方法,以为您生成SKU。
安装
您可以通过composer安装此包
composer require binary-cats/laravel-sku
服务提供器将自动注册自己。
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="BinaryCats\Sku\SkuServiceProvider" --tag="config"
这是要发布到config/laravel-sku.php
的配置文件内容
return [ /* |-------------------------------------------------------------------------- | SKU settings |-------------------------------------------------------------------------- | | Set up your SKU | */ 'default' => [ /* * SKU is based on a specific field of a model * You can use a single field or an array of fields */ 'source' => 'name', /* * Destination model field name * */ 'field' => 'sku', /* * SKU separator * */ 'separator' => '-', /* * Shall SKUs be enforced to be unique * */ 'unique' => true, /* * Shall SKUs be generated on create * */ 'generate_on_create' => true, /* * Shall SKUs be re-generated on update * */ 'generate_on_update' => true, ], /* |-------------------------------------------------------------------------- | SKU Generator |-------------------------------------------------------------------------- | | Define your own generator if needed. | */ 'generator' => \BinaryCats\Sku\Concerns\SkuGenerator::class, ];
请注意,上述设置假定您在模型中有一个sku
字段。如果您打算手动覆盖值,请确保将此字段添加到fillable
数组中;
用法
将BinaryCats\Sku\HasSku
特质添加到您的模型中。就这样!
namespace App; use BinaryCats\Sku\HasSku; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasSku; }
幕后,这将注册一个用于sku
字段的观察者,每次您保存模型时都会生成。
高级用法
如果您想为特定模型更改设置,可以重载skuOptions
()方法
namespace App; use BinaryCats\Sku\HasSku; use BinaryCats\Sku\Concerns\SkuOptions; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasSku; /** * Get the options for generating the Sku. * * @return BinaryCats\Sku\SkuOptions */ public function skuOptions() : SkuOptions { return SkuOptions::make() ->from(['label', 'another_field']) ->target('arbitrary_sku_field_name') ->using('_') ->forceUnique(false) ->generateOnCreate(true) ->refreshOnUpdate(false); } }
自定义生成器
假设您需要一些额外的逻辑,例如设置默认值或为SKU定义前缀,您可以实现自己的SkuGenerator。最简单的方法是扩展基类,但您可以自由探索任何方法。
首先,创建一个自定义类
namespace App\Components\SkuGenerator; use BinaryCats\Sku\Concerns\SkuGenerator; class CustomSkuGenerator extends SkuGenerator { /** * Get the source fields for the SKU. * * @return string */ protected function getSourceString(): string { // fetch the source fields $source = $this->options->source; // Fetch fields from model, skip empty $fields = array_filter($this->model->only($source)); // Fetch fields from the model, if empty, use custom logic to resolve if (empty($fields)) { return 'some-random-value-logic'; } // Impode with a separator return implode($this->options->separator, $fields); } }
然后更新generator
配置值
'generator' => \App\Components\SkuGenerator\CustomSkuGenerator::class,
您也可以选择完全更改实现;只需记住,自定义生成器必须实现BinaryCats\Sku\Contracts\SkuGenerator
。
关于SKU
库存单元允许您设置一个唯一的标识符或代码,该代码指向特定的库存单元。
更新日志
有关最近更改的更多信息,请参阅更新日志。
测试
composer test
贡献
有关详细信息,请参阅贡献。
安全
如果您发现任何安全问题,请通过电子邮件cyrill.kalita@gmail.com联系,而不是使用问题跟踪器。
明信片软件
您可以免费使用此包,但如果它进入您的生产环境,我们非常感谢您从您的家乡给我们寄一张明信片,提到您正在使用我们的哪些包。
鸣谢
支持我们
Binary Cats是一家位于美国伊利诺伊州的网页设计公司。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。