bhoft/yii2-autonumber

为 Yii 框架的自动编号扩展

安装: 6

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 17

类型:yii2-extension

1.5 2019-04-17 08:18 UTC

This package is auto-updated.

Last update: 2024-09-17 20:40:19 UTC


README

Yii2 扩展,用于生成格式化的自动编号。可用于生成文档编号。

此扩展是从 mdm/yii2-autonumber 分支出来的,并进行了某些修改。

修改点:增加 targetClass 属性,使得扩展也能用于不同的扩展类,例如 MyModel、MyModelForm,并且仍然可以获得相同的自动编号;group 现在可以是一个模型属性、函数或类函数;format 设置自动编号的格式;db 设置不同的数据库。

安装

安装此扩展的首选方式是通过 composer

运行以下命令

php composer.phar require --prefer-dist bhoft/yii2-autonumber "~1.0"

或者在您的 composer.json 文件的 require 部分添加以下内容

"bhoft/yii2-autonumber": "~1.0"

使用方法

通过执行 yii migrate 准备所需的表。

yii migrate --migrationPath=@bhoft/yii2/autonumber/migrations

如果不使用数据库迁移,您可以手动创建所需的表。

CREATE TABLE auto_number (
    "group" varchar(32) NOT NULL,
    "number" int,
    optimistic_lock int,
    update_time int,
    PRIMARY KEY ("group")
);

一旦安装了扩展,只需修改您的 ActiveRecord 类

public function behaviors()
{
	return [
		[
			'class' => 'bhoft\yii2\autonumber\Behavior',
			'targetClass' => 'app\models\MyModel',  // optional default OwnerClassname
			'attribute' => 'sales_num', // required
			'group' => 'groupAttribute', // optional
				// or as class function
	            // 'group' => array($this, 'getGroupId'),  // 
	            // or
	            // 'group' => $this->groupId'),  // 
			'format' => 'SA.'.date('Y-m-d').'.?' , // format auto number. '?' will be replaced with generated number
				//you could also use " 'format' => function($event){ return 'SA.'.date('Y-m-d').'.?' } "
			'digit' => 4 // optional, default to null.
			//'db' => Yii::app()->db,  // optional
		],
	];
}

// it will set value $model->sales_num as 'SA.2014-06-25.0001'

您可以将此扩展用作验证器,而不是行为

use bhoft\autonumber\AutonumberValidator;
...
public function rules()
{
    return [
        [['sales_num'], AutonumberValidator::className(), 'format'=>'SA.'.date('Y-m-d').'.?'],
        ...
        [['submission_num'], AutonumberValidator::className(), 'format'=>'?', 'targetClass' => 'app\models\MyModel', 'group' => 'call_id'],
    ];
}