nighten / doctrine-check

提供对doctrine类型映射的检查

0.5.0 2024-07-24 15:34 UTC

This package is auto-updated.

Last update: 2024-09-24 15:56:04 UTC


README

用于检查 doctrine 实体字段映射与 php 类型匹配的工具。

安装

composer require nighten/doctrine-check --dev

运行

在您的根目录中创建一个 doctrine-check-config.php 文件并修改

需要将 doctrine 对象管理器添加到配置中。以下为 Symfony 项目的示例

use App\Kernel;
use Nighten\DoctrineCheck\Config\DoctrineCheckConfig;
use Symfony\Component\Dotenv\Dotenv;

require __DIR__ . '/vendor/autoload.php';

return function (DoctrineCheckConfig $config): void {
    (new Dotenv())->bootEnv(__DIR__ . '/.env');
    $kernel = new Kernel($_SERVER['APP_ENV'], (bool)$_SERVER['APP_DEBUG']);
    $kernel->boot();

    $config->addObjectManager($kernel->getContainer()->get('doctrine')->getManager());
};

然后运行检查

vendor/bin/doctrine-check types

检查列表

简单的类型,如 int、string、bool、datetime 等。检查类型匹配和可空性

示例

#[ORM\Column(type: 'string', nullable: true)]
private ?string $code;

#[ORM\Column(type: 'integer', nullable: false, enumType: Type::class)]
private Type $type;

#[ORM\Column(type: 'boolean', nullable: false)]
private bool $deleted = false;

#[ORM\Column(type: 'datetime_immutable', nullable: true)]
private ?DateTimeImmutable $updatedAt = null;

关联映射 ManyToOne

示例

#[
    ORM\ManyToOne(targetEntity: User::class),
    ORM\JoinColumn(nullable: false),
]
private User $user;

嵌入式映射

检查嵌入式类中的类型和 null

检查主类中的类型和 null

示例

#[Embeddable]
class Address
{
    #[ORM\Column(type: 'string', nullable: true)]
    private ?string $code;
}

class User
{
    #[Embedded(class: Address::class)]
    private Address $address;
    ...
}

配置

添加额外的类型映射

use Symfony\Component\Uid\UuidV1;
use Symfony\Component\Uid\UuidV4;
use Symfony\Component\Uid\UuidV7;

//...

return function (DoctrineCheckConfig $config): void {
    //...
    $config->addTypeMapping('uuid', UuidV1::class);
    $config->addTypeMapping('uuid', UuidV4::class);
    $config->addTypeMapping('uuid', UuidV7::class);
};

添加特定的实体类

检查器将只检查指定的类

use App\Entity\EntityClass;
use Nighten\DoctrineCheck\Type;

//...

return function (DoctrineCheckConfig $config): void {
    //...
    $config->addEntityClass(EntityClass::class);
};

忽略某些实体类

检查器将检查所有类,除非指定

use App\Entity\EntityClass;
use Nighten\DoctrineCheck\Type;

//...

return function (DoctrineCheckConfig $config): void {
    //...
    $config->addExcludedEntityClasses(EntityClass::class);
};

添加错误忽略

检查器将跳过指定的错误

use App\Entity\EntityClass;
use Nighten\DoctrineCheck\Type;

//...

return function (DoctrineCheckConfig $config): void {
    //...
    $config->addIgnore(EntityClass::class, 'name', ErrorType::TYPE_WRONG_NULLABLE);
};