Symfony 3.3 не может сэкономить при обновлении с помощью Custom Validator

Привет У меня есть пользовательская проверка, которая проверяет уникальное значение на две таблицы (это означает, что я не могу использовать UniqueEntity Проверка)

Мой код работает нормально, за исключением обновления данных. У объекта проверки валидации уже есть данные как новые, но на самом деле это обновление

Вопрос в том, как исправить эту ошибку

И это мой код

KeywordsUnique.php

class KeywordsUnique extends Constraint
{
public $message = 'This {{value}} already used';

/**
* {@inheritdoc}
*/
public function validatedBy()
{
return 'keyword_unique';
}
}

KeywordsUniqueValidator.php

class KeywordsUniqueValidator extends ConstraintValidator
{
/**
* @var RepositoryInterface
*/
public $keywordRepository;

/**
* @var RepositoryInterface
*/
public $additionalKeywordRepository;

public function __construct(
RepositoryInterface $keywordRepository,
RepositoryInterface $additionalKeywordRepository
)
{
$this->keywordRepository = $keywordRepository;
$this->additionalKeywordRepository = $additionalKeywordRepository;
}

/**
* @param mixed $value
* @param Constraint|KeywordsUnique $constraint
*/
public function validate($value, Constraint $constraint)
{
if (!$value) {
return;
}

/** @var KeywordInterface $keyword */
$keyword = $this->keywordRepository->findOneBy(['word' => $value]);

/** @var AdditionalKeywordInterface $additionalKeyword */
$additionalKeyword = $this->additionalKeywordRepository->findOneBy(['word' => $value]);

if ($keyword !== null) {
if ($value === $keyword->getWord()) {
$builder = $this->context->buildViolation($constraint->message);
$builder->addViolation();
}
}

if ($additionalKeyword !== null) {
if ($value === $additionalKeyword->getWord()) {
$builder = $this->context->buildViolation($constraint->message);
$builder->addViolation();
}
}
}
}

Спасибо за ваш прогресс.

0

Решение

Проблема решена!

Проблема заключается в manager нашел сущность как новую ( manage определит автомат)

Как это исправить?

Вы должны проверить object которые проходят проверку с помощью id и проверить value по использованию context из Constraint $constraint получить объект

как этот код

$object = $this->context->getObject();

// Create data
if (null == $object->getId()) {
-- enter code for check validation
}

// Update data
if ($object->getId() != null) {
-- check value (if same data just return;) --
-- if value has changed just enter code for check validation --
}

Это оно !!

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector