Привет У меня есть пользовательская проверка, которая проверяет уникальное значение на две таблицы (это означает, что я не могу использовать 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();
}
}
}
}
Спасибо за ваш прогресс.
Проблема решена!
Проблема заключается в 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 --
}
Это оно !!
Других решений пока нет …