philippgrashoff/atkdatamodeltraits

此包的最新版本(5.2.1)没有可用的许可信息。

用于与Atk4\Data\Model一起使用的一组特性

5.2.1 2024-09-22 12:02 UTC

This package is auto-updated.

Last update: 2024-09-22 12:04:15 UTC


README

codecov

一组用于与 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;
    }
}