Skip to content

Commit 7a68325

Browse files
committed
[EntityAjaxType] Not clear list if not valid but synchronized
1 parent 7ddc95d commit 7a68325

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/Form/Type/EntityAjaxType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public function buildView(FormView $view, FormInterface $form, array $options):
6363
{
6464
$view->vars['url'] = $this->router->generate($options['route_name'], $options['route_parameters']);
6565
$view->vars['multiple'] = $options['multiple'];
66+
$view->vars['list_is_synchronized'] = $form->isSynchronized();
6667

6768
if ($options['multiple']) {
6869
$view->vars['full_name'] .= '[]';

templates/Form/entity_ajax.html.twig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
{% endif %}
1111

1212
<select {{ block('widget_attributes') }}>
13-
{# If null (invalid) or if invalid : Not display list because several labels are missing #}
14-
{% if value is not null and valid %}
13+
{# If null (not valid) or if not synchronized : Not display list because several labels are missing #}
14+
{% if value is not null and list_is_synchronized %}
1515
{% for id, label in value %}
1616
<option value="{{ id }}" selected="selected">{{ label }}</option>
1717
{% endfor %}

tests/Form/Type/EntityAjaxTypeTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
2323
use Symfony\Component\Form\FormFactoryInterface;
2424
use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
25+
use Symfony\Component\Validator\Constraints\Blank;
2526

2627
class EntityAjaxTypeTest extends KernelTestCase
2728
{
@@ -82,6 +83,7 @@ public function testView(bool $multiple, $modelData, $dataBuilderName, $expected
8283
$this->assertSame($expectedViewValue, $view->vars['value']);
8384
$this->assertSame('/fake', $view->vars['url']);
8485
$this->assertSame($multiple, $view->vars['multiple']);
86+
$this->assertTrue($view->vars['list_is_synchronized']);
8587
}
8688

8789
public function getTestViewProvider(): array
@@ -168,6 +170,22 @@ public function getTestSubmitInvalidProvider(): array
168170
];
169171
}
170172

173+
public function testSubmitInvalidByValidator(): void
174+
{
175+
$field = $this->factory->create(EntityAjaxType::class, null, [
176+
'class' => Tag::class,
177+
'route_name' => 'fake_route',
178+
'multiple' => false,
179+
'constraints' => [new Blank()],
180+
]);
181+
182+
$field->submit('2');
183+
184+
$this->assertTrue($field->isSynchronized());
185+
$this->assertFalse($field->isValid());
186+
$this->assertSame(['2' => 'tag2'], $field->getViewData());
187+
}
188+
171189
/**
172190
* @dataProvider getTestSubmitWithQueryBuilderProvider
173191
*/

0 commit comments

Comments
 (0)