nighten / doctrine-check
提供对doctrine类型映射的检查
0.5.0
2024-07-24 15:34 UTC
Requires
- php: >=8.1
- doctrine/orm: ^2.0|^3.0
- phpstan/phpdoc-parser: ^1.0
- symfony/console: ^6.4|^7.0
Requires (Dev)
- phpstan/phpstan: ^1.0|^2.0
- phpstan/phpstan-strict-rules: *
- phpunit/phpunit: *
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); };