Symfony2: Comment utiliser des contraintes sur un type de formulaire composé personnalisé?

Voici une question que j'ai été me casser la tête dessus depuis un moment maintenant.
S'il vous plaît sais que je ne suis pas un expert Symfony2 (encore), j'ai fait une erreur de débutant quelque part.

Champ1: Standard de Symfony2 text type de champ

Champ2: type de champ Personnalisé compoundchamp avec text champ + checkbox champ)

Symfony2: Comment utiliser des contraintes sur un type de formulaire composé personnalisé?

Mon Objectif: Arriver contraintes ajoutées à la autoValue champ de travailler sur la autoValue's text input child

La raison pour laquelle les contraintes ne fonctionnent pas c'est probablement parce que NotBlank s'attend à une chaîne de valeur et les données internes de ce champ de formulaire est un tableau array('input'=>'value', 'checkbox' => true). Ce tableau valeur est converti en une chaîne de caractères avec une coutume DataTransformer. Je soupçonne cependant que ce qui se passe APRÈS la validation du champ contre les contraintes que l'on connaît.

Comme vous le voyez ci-dessous dans le code commenté, j'ai été en mesure d'obtenir des contraintes de travail sur la saisie de texte, mais seulement lorsque codé en dur dans le autoValue de type de formulaire, et je veux valider contre le principal champ de contraintes.

Mon (simplifié) exemple de code pour le contrôleur et du terrain:

.

Contrôleur de code

La configuration d'un formulaire rapide à des fins de test.

<?php
//...
//$entityInstance holds an entity that has it's own constraints 
//that have been added via annotations

$formBuilder = $this->createFormBuilder( $entityInstance, array(
    'attr' => array(
        //added to disable html5 validation
        'novalidate' => 'novalidate'
    )
));

$formBuilder->add('regular_text', 'text', array(
    'constraints' => array(
        new \Symfony\Component\Validator\Constraints\NotBlank()
    )
));

$formBuilder->add('auto_text', 'textWithAutoValue', array(
    'constraints' => array(
        new \Symfony\Component\Validator\Constraints\NotBlank()
    )
));

.

TextWithAutoValue fichiers source

src/My/Component/Form/Type/TextWithAutoValueType.php

<?php

namespace My\Component\Form\Type;

use My\Component\Form\DataTransformer\TextWithAutoValueTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class TextWithAutoValueType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('value', 'text', array(
            //when I uncomment this, the NotBlank constraint works. I just
            //want to validate against whatever constraints are added to the
            //main form field 'auto_text' instead of hardcoding them here
            //'constraints' => array(
            //    new \Symfony\Component\Validator\Constraints\NotBlank()
            //)
        ));

        $builder->add('checkbox', 'checkbox', array(
        ));

        $builder->addModelTransformer(
            new TextWithAutoValueTransformer()
        );
    }

    public function getName()
    {
        return 'textWithAutoValue';
    }
}

src/My/Component/Form/DataTransformer/TextWithAutoValueType.php

<?php

namespace My\Component\Form\DataTransformer;

use Symfony\Component\Form\DataTransformerInterface;

class TextWithAutoValueTransformer 
    implements DataTransformerInterface
{
    /**
     * @inheritdoc
     */
    public function transform($value)
    {
        return array(
            'value'    => (string) $value,
            'checkbox' => true
        );
    }

    /**
     * @inheritdoc
     */
    public function reverseTransform($value)
    {
        return $value['value'];
    }
}

src/Mon/ComponentBundle/Resources/config/services.yml

parameters:

services:
    my_component.form.type.textWithAutoValue:
        class: My\Component\Form\Type\TextWithAutoValueType
        tags:
            - { name: form.type, alias: textWithAutoValue }

src/Mon/ComponentBundle/Resources/views/Form/champs.html.twig

{% block textWithAutoValue_widget %}
    {% spaceless %}

    {{ form_widget(form.value) }}
    {{ form_widget(form.checkbox) }}
    <label for="{{ form.checkbox.vars.id}}">use default value</label>

    {% endspaceless %}
{% endblock %}

.

Question

J'ai lu dans les docs et google depuis quelques heures maintenant et ne peut pas comprendre comment les copier, de les lier, de référence ou de l'origine des contraintes qui ont été ajoutés lors de la construction de ce formulaire.

-> Est-ce que quelqu'un sait comment faire cela?

-> Pour les points de bonus; comment faire pour activer les contraintes qui ont été ajoutés au formulaire principal est lié entité? (via des annotations sur la classe d'entité)

PS

Désolé c'est devenu une longue question, j'espère que j'ai réussi à faire mon problème clairement. Si non, merci de me demander pour plus de détails!

source d'informationauteur Maurice