lsb/numbering-bundle

Symfony应用程序的数字生成器

v1.0.2 2020-05-20 21:46 UTC

This package is auto-updated.

Last update: 2024-09-05 20:31:00 UTC


README

Latest Stable Version Build Status Scrutinizer Code Quality Code Coverage

此包为Symfony 5应用程序中任何给定对象(例如订单、发票等)生成后续数字的功能。

它在系统数据库中创建一个简单的配置,存储当前计数器和上下文数据。

安装

composer require lsb/numbering-bundle

配置

通过在 lsb_numbering.yaml 文件中定义模式和计数器配置数据来配置此包。

# examples of configuration

lsb_numbering:
    patterns:
        - { name: pattern1, pattern: 'IN/{year}/{number|6}'}
        - { name: pattern2, pattern: "ON/{day}/{number|4}"}
        - { name: pattern3, pattern: "{number|5}-{context_object}-{month}"}

    counter_configs:
        - {name: counterConfig1, patternName: pattern1, step: 1, start: 10 }
        - {name: counterConfig2, patternName: pattern2, step: 2, start: 20, time_context: year }
        - {name: counterConfig3, patternName: pattern3, step: 3, start: 30, time_context: month, context_object_fqcn: "App/Entity/Branch" }

配置规则
  • 可以通过任何带有预定义标签的字符串定义数字模式(请参阅标签部分)
  • 标签必须用花括号括起来
  • 只需 {number} 标签即可
  • 计数器可以在时间上下文中工作
  • 某些标签后可以跟一个长度修饰符,例如 {year|2}, {number|6},这会将解析的值限制在给定的长度。
标签

用法

主题对象是您想要为其生成数字的任何对象。它需要实现 NumberableInterface。

<?php

namespace App\Entity;

use LSB\NumberingBundle\Interfaces\NumberableInterface;

class Order implements NumberableInterface
{
    // class body
}

使用 NumberingGenerator 服务示例

<?php

namespace App\Service;

use App\Entity\Order;
use LSB\NumberingBundle\Model\GeneratorOptions;
use LSB\NumberingBundle\Service\NumberingGenerator;
use LSB\NumberingBundle\Interfaces\NumberableInterface;

class ExampleService
{
    /** @var NumberingGenerator */
    protected $ng;

    public function __construct(NumberingGenerator $generator)
    {
        $this->ng = $generator;
    }

    public function exampleNumbers(): void
    {
        // subject example object
        $order = new Order();

        // options object
        $options = new GeneratorOptions('counterConfig1');

        // generate number
        $simpleNumber = $this->ng->generateNumber($order, $options);

        // returns resolved number e.g. IN/2020/000001
        $simpleNumber->getNumber(); 
    }
}

许可

LSBNumberingBundle 在 MIT 许可证 下可用。