devel_wizard-2.x-dev/src/Constraints/ConfigEntityExistsValidator.php

src/Constraints/ConfigEntityExistsValidator.php
<?php

declare(strict_types=1);

namespace Drupal\devel_wizard\Constraints;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class ConfigEntityExistsValidator extends ConstraintValidator implements ContainerInjectionInterface {

  protected EntityTypeManagerInterface $entityTypeManager;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity_type.manager'),
    );
  }

  public function __construct(EntityTypeManagerInterface $entityTypeManager) {
    $this->entityTypeManager = $entityTypeManager;
  }

  /**
   * {@inheritdoc}
   */
  public function validate($value, Constraint $constraint) {
    /** @var \Drupal\devel_wizard\Plugin\Validation\Constraint\ConfigEntityExistsConstraint $constraint */
    if ($value === NULL || $value === '') {
      return;
    }

    $args = [
      '%entity_type.id' => $constraint->entityTypeId,
      '@entity_type.id' => $constraint->entityTypeId,
      '%entity_type.label' => $constraint->entityTypeId,
      '@entity_type.label' => $constraint->entityTypeId,
    ];

    if (!$this->entityTypeManager->hasDefinition($constraint->entityTypeId)) {
      $this->context->addViolation($constraint->messageEntityTypeIsMissing, $args);

      return;
    }

    $entityType = $this->entityTypeManager->getDefinition($constraint->entityTypeId);
    $args['%entity_type.label'] = $entityType->getLabel();
    $args['@entity_type.label'] = $entityType->getLabel();

    $storage = $this->entityTypeManager->getStorage($constraint->entityTypeId);
    $entities = $storage->loadMultiple();
    $exists = array_key_exists($value, $entities);
    $args['%bundle.id'] = $value;
    $args['@bundle_list'] = implode(', ', array_keys($entities));

    if ($exists && !$constraint->hasToBeExists) {
      $this->context->addViolation($constraint->messageExpectedNotToBeExists, $args);
    }
    elseif (!$exists && $constraint->hasToBeExists) {
      $this->context->addViolation($constraint->messageExpectedToBeExists, $args);
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc