michalsn / codeigniter4-uuid
适用于CodeIgniter 4的UUID包,支持模型和实体。
Requires
- php: >=8.1
- ramsey/uuid: ^4.7
Requires (Dev)
- codeigniter4/codeigniter4: dev-develop
- phpunit/phpunit: 8.5.*
This package is auto-updated.
Last update: 2024-09-22 15:11:32 UTC
README
此包简化了在CodeIgniter 4中处理UUID的工作。它提供了四个类来实现这一点:Uuid
、UuidModel
、UuidEntity
和UuidCast
。此实现与Ramsey\Uuid紧密耦合。
通过composer安装
composer require michalsn/codeigniter4-uuid
手动安装
下载此仓库,然后通过编辑 app/Config/Autoload.php 并将 Michalsn\UuidModel 命名空间添加到 $psr4 数组中来启用它。例如,如果您将其复制到 app/ThirdParty
<?php $psr4 = [ 'Config' => APPPATH . 'Config', APP_NAMESPACE => APPPATH, 'App' => APPPATH, 'Michalsn\Uuid' => APPPATH . 'ThirdParty/codeigniter4-uuid/src', ];
版本
如何使用它
通常,使用UuidModel
和UuidEntity
与使用CodeIgniter 4框架提供的原始类没有太大区别。我们只是有一些额外的配置选项。您可能根本不需要使用Uuid
类,因为大多数事情都已经自动化。
Uuid
与Uuid
类一起工作非常简单
<?php $uuid = service('uuid'); // will prepare UUID4 object $uuid4 = $uuid->uuid4(); // will assign UUID4 as string $string = $uuid4->toString(); // will assign UUID4 as byte string $byte_string = $uuid4->getBytes();
如果您需要为特定UUID版本设置任何额外的配置选项,则可以通过配置文件来完成。
UuidModel
UUID字段始终以string
形式返回,即使我们在数据库中以字节格式存储它们。这一决定是出于使用方便的考虑。我们不必担心字段类型或数据转换。
现在,让我们看看如何在代码中使用UuidModel
的一个简单示例。在下面的示例中,没有进行任何额外的更改,只是我们的模型扩展了UuidModel
。主键将以UUID4的字节格式存储在数据库中。
<?php namespace App\Models; use Michalsn\Uuid\UuidModel; class Project1Model extends UuidModel { protected $table = 'projects_1'; protected $primaryKey = 'id'; protected $returnType = 'array'; protected $useSoftDeletes = true; protected $allowedFields = ['name', 'description', 'created_at', 'updated_at', 'deleted_at']; protected $useTimestamps = true; protected $validationRules = [ 'name' => 'required|min_length[3]', 'description' => 'required', ]; }
现在,这里有一个示例,我们将使用UUID,但不是作为主键。
<?php namespace App\Models; use Michalsn\Uuid\UuidModel; class Project2Model extends UuidModel { protected $uuidFields = ['category_id']; protected $table = 'projects_2'; protected $primaryKey = 'id'; protected $returnType = 'array'; protected $useSoftDeletes = true; protected $allowedFields = ['category_id', 'name', 'description', 'created_at', 'updated_at', 'deleted_at']; protected $useTimestamps = true; protected $validationRules = [ 'category_id' => 'required', 'name' => 'required|min_length[3]', 'description' => 'required', ]; }
UuidEntity
只有在我们将UUID字段以字节格式存储时才需要使用UuidEntity
。在其他情况下,它没有比原始Entity
类更多的优点。与UuidModel
类似,默认情况下,我们假设只有主键将具有UUID类型。
现在让我们看看两个示例,这些示例与之前显示的模型示例相匹配。
<?php namespace App\Entities; use Michalsn\Uuid\UuidEntity; class Project1Entity extends UuidEntity { protected $attributes = [ 'id' => null, 'name' => null, 'description' => null, 'created_at' => null, 'updated_at' => null, 'deleted_at' => null, ]; }
<?php namespace App\Entities; use Michalsn\Uuid\UuidEntity; class Project2Entity extends UuidEntity { protected $uuids = ['category_id']; protected $attributes = [ 'id' => null, 'category_id' => null, 'name' => null, 'description' => null, 'created_at' => null, 'updated_at' => null, 'deleted_at' => null, ]; }
就是这样。不需要更多更改。
UuidCast
注意:如果您打算使用UuidModel
类,请不要使用此转换类。
由于CodeIgniter现在允许在实体中使用自定义转换类,我们已添加了自己的转换类。此转换类使UUID在数据检索期间从字节转换为字符串,并在数据设置时反向转换。通常您不需要使用转换函数,因为从字符串到字节的转换是在UuidModel
类中完成的。考虑到这一点,您应该仅在您想稍后不使用UuidModel
类而与实体一起工作时才使用此转换功能。
这是我们将如何使用我们的转换类与实体一起的一个简单示例。
<?php namespace App\Entities; class MyEntity extends Entity { protected $casts = [ 'id' => 'uuid', ]; protected $castHandlers = [ 'uuid' => 'Michalsn\Uuid\UuidCast', ]; }
限制
目前,当您想以字节格式存储UUID时,此类不支持SQLite3数据库。
支持的UUID版本
- 版本1:基于时间 -
uuid1
- 版本2:DCE安全 -
uuid2
- 版本3:基于名称(MD5) -
uuid3
- 版本4:随机 -
uuid4
- 版本 5:基于名称(SHA-1) -
uuid5
- 版本 6:有序时间(非标准) -
uuid6
许可证
MIT 许可证(MIT)。请参阅许可证文件以获取更多信息。