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;
// ...
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' ]
The Validator will not produce a violation when value is empty. This means that you should most likely use it in
combination with NotBlank
.