happyr / entity-exists-validation-constraint
Verify that your entity exists
Fund package maintenance!
Nyholm
Installs: 111 469
Dependents: 0
Suggesters: 0
Security: 0
Stars: 30
Watchers: 2
Forks: 11
Open Issues: 3
Requires
- php: ^8.1
- doctrine/orm: ^2.4
- symfony/validator: ^6.0 || ^7.0
Requires (Dev)
- symfony/phpunit-bridge: ^6.0
- symfony/validator: ^6.4 || ^7.0
README
A small validator that verifies that an Entity actually exists. This is especially useful if you use Symfony Messenger component. Now you can safely validate the message and put it on a queue for processing later.
namespace App\Message\Command; use Happyr\Validator\Constraint\EntityExist; use Symfony\Component\Validator\Constraints as Assert; final class EmailUser { /** * @Assert\NotBlank * @EntityExist(entity="App\Entity\User") * * @var int User's id property */ private $user; /** * @Assert\NotBlank * @EntityExist(entity="App\Entity\Other", property="name") * * @var string The name of "Other". We use its "name" property. */ private $other; // ...
In case you are using other constraints to validate the property before entity should be checked in the database (like @Assert\Uuid
) you should use Group sequence in order to avoid 500 errors from Doctrine mapping.
namespace App\Message\Command; use Happyr\Validator\Constraint\EntityExist; use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\GroupSequence({"EmailUser", "DatabaseCall"}) */ final class EmailUser { /** * @Assert\NotBlank * @Assert\Uuid * @EntityExist(entity="App\Entity\User", groups={"DatabaseCall"}, property="uuid") * * @var string Uuid */ private $user; // ...
Install
composer require happyr/entity-exists-validation-constraint
Then register the services with:
# config/packages/happyr_entity_exists_validator.yaml services: Happyr\Validator\Constraint\EntityExistValidator: arguments: ['@doctrine.orm.entity_manager'] tags: [ 'validator.constraint_validator' ]
Note
The Validator will not produce a violation when value is empty. This means that you should most likely use it in
combination with NotBlank
.