cebe/yii2-lifecycle-behavior

通过定义状态机中的允许状态变化来定义模型的生命周期。

2.0.0 2018-12-21 12:55 UTC

This package is auto-updated.

Last update: 2024-09-22 01:36:29 UTC


README

通过定义状态机中的允许状态变化来定义模型的生命周期。

Latest Stable Version Total Downloads License Build Status

安装

这是为 Yii 2 PHP 框架提供的扩展。

建议通过运行以下命令使用 composer 来进行安装

composer require cebe/yii2-lifecycle-behavior

或者您可以将以下内容添加到您的 composer.json 文件中的 require 部分,然后运行 composer update

"cebe/yii2-lifecycle-behavior": "~2.0.0"

使用方法

您可以将此行为添加到 ActiveRecord 类中。它不适用于 yii\base\Model,因为它依赖于仅在活动记录中可用的旧属性功能。

您可以通过创建一个 behaviors() 方法(如果还没有的话)或将其添加到现有行为列表中,将行为添加到模型中。

以下示例显示了如何定义允许的状态变化

	public function behaviors()
	{
		return [
			'lifecycle' => [
				'class' => cebe\lifecycle\LifecycleBehavior::class,
				'validStatusChanges' => [
					'draft'     => ['ready', 'delivered'],
					'ready'     => ['draft', 'delivered'],
					'delivered' => ['payed', 'archived'],
					'payed'     => ['archived'],
					'archived'  => [],
				],
			],
		];
	}

上述状态转换可以表示为以下状态机

Visualization of state transitions

状态字段验证

默认情况下,当调用 validate()save() 时,行为将验证记录的 status 属性,并在状态以不允许的方式更改时添加一个验证错误。

  • 可以通过设置行为的 statusAttribute 属性来配置要验证的属性。
  • 可以通过设置行为的 validationErrorMessage 属性来配置错误消息。占位符 {old}{new} 将被相应的状态值替换。

程序流程验证

行为还可以用于验证程序流程中的状态变化。这与上述用户输入验证不同,因为在这种情况下,程序流程将通过一个 异常 被中止。对于用户输入,错误消息的接收者是用户;如果状态未由用户更改,则错误消息的接收者是开发者。

配置不同的验证方法

默认情况下,状态字段在验证和更新时都会进行验证。要禁用其中一种方法,您可以配置默认为以下内容的 $events 属性:

'events' => [
    BaseActiveRecord::EVENT_BEFORE_VALIDATE => 'handleBeforeValidate',
    BaseActiveRecord::EVENT_BEFORE_UPDATE => 'handleBeforeSave',
]