philippgrashoff / atkdatamodeltraits
此包的最新版本(5.2.1)没有可用的许可信息。
用于与Atk4\Data\Model一起使用的一组特性
5.2.1
2024-09-22 12:02 UTC
Requires
- php: 8.*
- ext-sodium: *
- atk4/data: 5.*
Requires (Dev)
- phpstan/phpstan: 1.*
- phpunit/phpunit: 10.*
README
一组用于与 Atk4\Data\Model 一起使用的特性。
CreatedDateAndLastUpdatedTrait
此特性可用于向模型添加 created_date
和/或 last_updated
字段。相应的钩子将自动添加,以便在插入时保存 created_date
并在更新时保存 last_updated
。
class SomeModel extends Model { use CreatedDateAndLastUpdatedTrait; protected function init(): void { parent::init(); $this->addCreatedDateFieldAndHook(); $this->addLastUpdatedFieldAndHook(); } }
UniqueFieldTrait
此特性提供了一个 isFieldUnique()
函数,用于检查字段的当前值是否在所有持久化记录中是唯一的。此功能也可以通过向 SQL 持久化添加 UNIQUE 索引来实现。在应用层拥有此功能可以是明智的,以便独立于持久化的特性,或者为了避免在尝试保存非唯一值时从持久化中返回异常。
class SomeModel extends Model { use UniqueFieldTrait; protected function init(): void { parent::init(); $this->addField('unique_field'); } $this->onHook( Model::HOOK_BEFORE_SAVE, function(self $entity, bool $isUpdate) { while(!$entity->isFieldUnique('unique_field')) { //some function which recalculates field value. } } ); }
CryptIdTrait
此特性用于生成如 D6f2-a395Jskv2
这样的加密 ID。您可以自由定义加密 ID 应有的格式。此功能可以用于创建优惠券代码或创建无法猜测但易于阅读的代码/标识符。字符 I、l、0 和 O 被移除,因为它们很容易被人类混淆。要使用此特性,您只需要在 Model::init()
中添加加密 ID 字段并使用 addCryptIdFieldAndHooks
,然后实现一个自定义方法 generateCryptId()
,该方法返回您选择的格式的随机字符串。
class SomeModel extends Model { use CryptIdTrait; protected function init(): void { parent::init(); $this->addCryptIdFieldAndHooks('crypt_id'); } /** * Custom implementation if cryptic ID format, In this case XXXXX-XXXXX-XXXXX */ protected function generateCryptId(): string { $cryptId = ''; for ($i = 0; $i < 3; $i++) { if($i > 0) { $cryptId .= '-'; } for ($j = 0; $j < 5; $j++) { $cryptId .= $this->getRandomChar(); } } return $cryptId; } }