Как добавить violation для конкретного элемента CollectionType?

Для добавления нарушения (violation) для конкретного элемента CollectionType в Symfony вы можете использовать средства валидации и обработки форм.

1. Определите проверку валидации для нужного элемента CollectionType. Для этого создайте класс ограничения (constraint) с помощью аннотации или путем создания нового класса реализующего интерфейс SymfonyComponentValidatorConstraint и определите в нем правила валидации. Например, вы можете проверять элемент на уникальность или на соответствие определенным критериям.

use SymfonyComponentValidatorConstraint;
use SymfonyComponentValidatorConstraints as Assert;

/**
 * @Annotation
 */
class UniqueElement extends Constraint
{
    public $message = 'The element must be unique.';
}

2. Создайте валидатор для проверки правил из предыдущего шага. В классе валидатора определите метод validate(), который будет осуществлять нужные проверки и добавлять нарушения при необходимости:

use SymfonyComponentValidatorConstraint;
use SymfonyComponentValidatorConstraintValidator;

class UniqueElementValidator extends ConstraintValidator
{
    public function validate($value, Constraint $constraint)
    {
        // Проверка вашего критерия уникальности (например, ключей массива)
        $isUnique = // ваша проверка уникальности;

        if (!$isUnique) {
            $this->context->buildViolation($constraint->message)
                ->addViolation();
        }
    }
}

3. Зарегистрируйте ваш класс UniqueElement как сервис в файле конфигурации services.yaml:

services:
    AppValidatorConstraintsUniqueElement:
        tags:
            - { name: validator.constraint_validator, alias: unique_element_validator }

4. Примените валидацию в своей форме для конкретного элемента CollectionType. Вам необходимо добавить аннотацию @UniqueElement к полю, которое должно быть уникальным:

use AppValidatorConstraintsUniqueElement;

class MyFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('myCollectionField', CollectionType::class, [
                'entry_type' => MyCollectionElementType::class,
                'constraints' => [
                    new UniqueElement(),
                ],
            ]);
    }
}

Теперь при отправке формы, при несоответствии уникальности элемента коллекции, будет добавлено нарушение и вы сможете отобразить его пользователю.

Надеюсь, это поможет вам реализовать вашу задачу по добавлению violation для конкретного элемента CollectionType в Symfony.