8000 [Form][Bug] Embedded form validation bubbling · Issue #8557 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content
[Form][Bug] Embedded form validation bubbling #8557
Closed
@sirian

Description

@sirian

See example of embedded form.

class Item
{
    public $title;
}

class Foo implements \IteratorAggregate
{
    public $items;

    public function __construct()
    {
        $this->items = [new Item()];
    }

    public function getIterator()
    {
        return new \ArrayIterator([
            'items' => $this->items
        ]);
    }
}

class ItemType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title', 'text');
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults([
            'data_class' => __NAMESPACE__ . '\Item',
            'error_bubbling' => false
        ]);
    }


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

class FooType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('items', 'collection', [
            'type' => new ItemType()
        ]);
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults([
            'data_class' => __NAMESPACE__ . '\Foo',
            'error_bubbling' => false
        ]);
    }

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

Resources/config/validation.yml:

Foo\Item:
    properties:
        title:
            - NotBlank:
                message: XXX

Now when I call this

$form = $this->get('form.factory')
    ->createNamed('form', new FooType(), new Foo(), [
        'csrf_protection' => false,
        'error_bubbling' => false
    ]);
;

$form->submit([]);
var_dump($form->getErrors());

Error from items[0].title bubbles to the root of the form

array(1) {
  [0]=>
  object(Symfony\Component\Form\FormError)#534 (4) {
    ["message":"Symfony\Component\Form\FormError":private]=>
    string(3) "XXX"
    ["messageTemplate":protected]=>
    string(3) "XXX"
    ["messageParameters":protected]=>
    array(0) {
    }
    ["messagePluralization":protected]=>
    NULL
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0