ensostudio / doctrine-entity-validator
Entity validator for Doctrine ORM 3
1.1.2
2025-05-09 09:37 UTC
Requires
- php: >=8.1
- ext-mbstring: *
- doctrine/orm: ^3.3.2
Requires (Dev)
- phpunit/phpunit: ^9.6.22
This package is auto-updated.
Last update: 2025-05-09 09:39:00 UTC
README
By default, entity validation based on attached \Doctrine\ORM\Mapping\Column
attributes and attributes inherited
ColumnValidator interface.
Also, you can add custom validators by EntityValidator::addValidator()
or create instance of ColumnValidator interface.
Validator skip validation:
- If
Column
attribute declared as notupdatable
and/orinsertable
- Validation on persist/insert and property have
\Doctrine\ORM\Mapping\Id
attribute
Validator checks by column type:
- If property value is null (or not defined), but
Column
attribute not declared asnullable
or/and don't have default value (options: ['default' => '...']
) - If
Column
attribute have numeric type (integer, float, decimal and etc.):- If defined
unsigned
option, then property value must be more than zero - If type
decimal
and definedprecision
, then check size of value
- If defined
- If
Column
attribute have string type (sting, text and etc.):- If defined
fixed
option andlength
, then check string length - If defined only
length
, then check string length
- If defined
- If
Column
attribute have enum type:- If defined
enumType
, then check is proprerty value is declared in enum class
- If defined
ColumnValidator
attributes:
Examples
Validates Product
entity before insert/update data:
use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use \EnsoStudio\Doctrine\ORM\ColumnValidators; use EnsoStudio\Doctrine\ORM\EntityValidator; use EnsoStudio\Doctrine\ORM\EntityValidationException; #[ORM\Entity] #[ORM\Table(name: 'products')] #[ORM\HasLifecycleCallbacks] class Product { ... #[ORM\Column(type: Types::STRING, length: 200)] #[ColumnValidators\MinLength(2)] #[ColumnValidators\Slug] private string $slug; #[ORM\Column(type: Types::STRING, length: 150)] #[ColumnValidators\Type('print')] private string $name; #[ORM\PrePersist] public function beforeInsert(): void { $validator = new EntityValidator($this); // Callback same to ColumnValidators\MinLength(3) $validator->addValidator( 'name', static function (string $propertyValue, string $propertyName, object $entity) { if (mb_strlen($propertyValue) < 3) { throw new EntityValidationException( ['% less than 3 characters', $propertyName], $propertyName, $entity ); } } ); $validator->validate(); } #[ORM\PreUpdate] public function beforeUpdate(): void { $validator = new EntityValidator($this); ... $validator->validate(true); } }
Or you can use EntityValidationSubscriber
to validates all entities:
use Doctrine\ORM\EntityManager; use EnsoStudio\Doctrine\ORM\EntityValidationSubscriber; ... $entityManager = new EntityManager($connection, $config); $entityManager->getEventManager() ->addEventSubscriber(new EntityValidationSubscriber(true));
Requirements
- PHP >= 8.1 (with
mbstring
extension) - doctrine/orm >= 3.3
Installation
If you do not have Composer, you may install it by following the instructions at getcomposer.org.
You can then install this library using the following command:
composer require ensostudio/doctrine-entity-validator