cebe / yii2-lifecycle-behavior
通过定义状态机中的允许状态变化来定义模型的生命周期。
2.0.0
2018-12-21 12:55 UTC
Requires
- php: >=5.6.0
- yiisoft/yii2: ~2.0.0
Requires (Dev)
- cebe/indent: *
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-09-22 01:36:29 UTC
README
通过定义状态机中的允许状态变化来定义模型的生命周期。
安装
这是为 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' => [], ], ], ]; }
上述状态转换可以表示为以下状态机
状态字段验证
默认情况下,当调用 validate()
或 save()
时,行为将验证记录的 status
属性,并在状态以不允许的方式更改时添加一个验证错误。
- 可以通过设置行为的
statusAttribute
属性来配置要验证的属性。 - 可以通过设置行为的
validationErrorMessage
属性来配置错误消息。占位符{old}
和{new}
将被相应的状态值替换。
程序流程验证
行为还可以用于验证程序流程中的状态变化。这与上述用户输入验证不同,因为在这种情况下,程序流程将通过一个 异常 被中止。对于用户输入,错误消息的接收者是用户;如果状态未由用户更改,则错误消息的接收者是开发者。
配置不同的验证方法
默认情况下,状态字段在验证和更新时都会进行验证。要禁用其中一种方法,您可以配置默认为以下内容的 $events
属性:
'events' => [ BaseActiveRecord::EVENT_BEFORE_VALIDATE => 'handleBeforeValidate', BaseActiveRecord::EVENT_BEFORE_UPDATE => 'handleBeforeSave', ]