livre-1.0.0-beta6/book/tests/modules/book_test/src/Plugin/Validation/Constraint/BookTestTitleConstraintValidator.php

book/tests/modules/book_test/src/Plugin/Validation/Constraint/BookTestTitleConstraintValidator.php
<?php

namespace Drupal\book_test\Plugin\Validation\Constraint;

use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\State\StateInterface;
use Drupal\node\NodeInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

/**
 * Constraint validator for validating against the book node's title.
 */
class BookTestTitleConstraintValidator extends ConstraintValidator implements ContainerInjectionInterface {

  /**
   * Creates a new BookTestTitleConstraintValidator instance.
   */
  public function __construct(
    protected StateInterface $state,
  ) {}

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

  /**
   * {@inheritdoc}
   */
  public function validate($entity, Constraint $constraint): void {
    $invalid_title = $this->state->get('book_test.invalid_node_title');
    if (!$invalid_title) {
      return;
    }
    assert($constraint instanceof BookTestTitleConstraint);
    assert($entity instanceof NodeInterface);
    $title = $entity->getTitle();
    if ($invalid_title === $title) {
      // Add a field level violation.
      $this->context
        ->buildViolation($constraint->message, [
          '@title' => $title,
        ])
        ->atPath('title')
        ->setInvalidValue($entity)
        ->addViolation();
      if ($this->state->get('book_test.entity_level_violation')) {
        // Also add an entity level violation.
        $this->context->addViolation($constraint->entityLevelMessage, [
          '@title' => $title,
        ]);
      }
    }
  }

}

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

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