feature #36088 [Form] Added "collection_entry" block prefix to CollectionType entries (HeahDude)
This PR was merged into the 5.1-dev branch.
Discussion
----------
[Form] Added "collection_entry" block prefix to CollectionType entries
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Tickets | Fix #36039
| License | MIT
| Doc PR | TODO
Allows to use global `collection_entry_row`, `collection_entry_label`, `collection_entry_widget` and `collection_entry_errors` themes after dynamic `_form_name_collection_name_entry_* ` ones.
Commits
-------
2ff1f886d7
[Form] Added "collection_entry" block prefix to CollectionType entries
This commit is contained in:
commit
c0ee02bf19
@ -4,6 +4,7 @@ CHANGELOG
|
|||||||
5.1.0
|
5.1.0
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
* Added `collection_entry` block prefix to `CollectionType` entries
|
||||||
* Added a `choice_filter` option to `ChoiceType`
|
* Added a `choice_filter` option to `ChoiceType`
|
||||||
* Added argument `callable|null $filter` to `ChoiceListFactoryInterface::createListFromChoices()` and `createListFromLoader()` - not defining them is deprecated.
|
* Added argument `callable|null $filter` to `ChoiceListFactoryInterface::createListFromChoices()` and `createListFromLoader()` - not defining them is deprecated.
|
||||||
* Added a `ChoiceList` facade to leverage explicit choice list caching based on options
|
* Added a `ChoiceList` facade to leverage explicit choice list caching based on options
|
||||||
|
@ -72,9 +72,33 @@ class CollectionType extends AbstractType
|
|||||||
*/
|
*/
|
||||||
public function finishView(FormView $view, FormInterface $form, array $options)
|
public function finishView(FormView $view, FormInterface $form, array $options)
|
||||||
{
|
{
|
||||||
if ($form->getConfig()->hasAttribute('prototype') && $view->vars['prototype']->vars['multipart']) {
|
$prefixOffset = -1;
|
||||||
|
// check if the entry type also defines a block prefix
|
||||||
|
/** @var FormInterface $entry */
|
||||||
|
foreach ($form as $entry) {
|
||||||
|
if ($entry->getConfig()->getOption('block_prefix')) {
|
||||||
|
--$prefixOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($view as $entryView) {
|
||||||
|
array_splice($entryView->vars['block_prefixes'], $prefixOffset, 0, 'collection_entry');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var FormInterface $prototype */
|
||||||
|
if ($prototype = $form->getConfig()->getAttribute('prototype')) {
|
||||||
|
if ($view->vars['prototype']->vars['multipart']) {
|
||||||
$view->vars['multipart'] = true;
|
$view->vars['multipart'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($prefixOffset > -2 && $prototype->getConfig()->getOption('block_prefix')) {
|
||||||
|
--$prefixOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
array_splice($view->vars['prototype']->vars['block_prefixes'], $prefixOffset, 0, 'collection_entry');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,6 +13,7 @@ namespace Symfony\Component\Form\Tests\Extension\Core\Type;
|
|||||||
|
|
||||||
use Symfony\Component\Form\Tests\Fixtures\Author;
|
use Symfony\Component\Form\Tests\Fixtures\Author;
|
||||||
use Symfony\Component\Form\Tests\Fixtures\AuthorType;
|
use Symfony\Component\Form\Tests\Fixtures\AuthorType;
|
||||||
|
use Symfony\Component\Form\Tests\Fixtures\BlockPrefixedFooTextType;
|
||||||
|
|
||||||
class CollectionTypeTest extends BaseTypeTest
|
class CollectionTypeTest extends BaseTypeTest
|
||||||
{
|
{
|
||||||
@ -404,6 +405,62 @@ class CollectionTypeTest extends BaseTypeTest
|
|||||||
$this->assertFalse($child->createView()->vars['prototype']->vars['required'], '"Prototype" should not be required');
|
$this->assertFalse($child->createView()->vars['prototype']->vars['required'], '"Prototype" should not be required');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testEntriesBlockPrefixes()
|
||||||
|
{
|
||||||
|
$collectionView = $this->factory->createNamed('fields', static::TESTED_TYPE, [''], [
|
||||||
|
'allow_add' => true,
|
||||||
|
])
|
||||||
|
->createView()
|
||||||
|
;
|
||||||
|
|
||||||
|
$expectedBlockPrefixes = [
|
||||||
|
'form',
|
||||||
|
'text',
|
||||||
|
'collection_entry',
|
||||||
|
'_fields_entry',
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->assertCount(1, $collectionView);
|
||||||
|
$this->assertSame($expectedBlockPrefixes, $collectionView[0]->vars['block_prefixes']);
|
||||||
|
$this->assertSame($expectedBlockPrefixes, $collectionView->vars['prototype']->vars['block_prefixes']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEntriesBlockPrefixesWithCustomBlockPrefix()
|
||||||
|
{
|
||||||
|
$collectionView = $this->factory->createNamed('fields', static::TESTED_TYPE, [''], [
|
||||||
|
'entry_options' => ['block_prefix' => 'field'],
|
||||||
|
])
|
||||||
|
->createView()
|
||||||
|
;
|
||||||
|
|
||||||
|
$this->assertCount(1, $collectionView);
|
||||||
|
$this->assertSame([
|
||||||
|
'form',
|
||||||
|
'text',
|
||||||
|
'collection_entry',
|
||||||
|
'field',
|
||||||
|
'_fields_entry',
|
||||||
|
], $collectionView[0]->vars['block_prefixes']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEntriesBlockPrefixesWithCustomBlockPrefixedType()
|
||||||
|
{
|
||||||
|
$collectionView = $this->factory->createNamed('fields', static::TESTED_TYPE, [''], [
|
||||||
|
'entry_type' => BlockPrefixedFooTextType::class,
|
||||||
|
])
|
||||||
|
->createView()
|
||||||
|
;
|
||||||
|
|
||||||
|
$this->assertCount(1, $collectionView);
|
||||||
|
$this->assertSame([
|
||||||
|
'form',
|
||||||
|
'block_prefixed_foo_text',
|
||||||
|
'collection_entry',
|
||||||
|
'foo',
|
||||||
|
'_fields_entry',
|
||||||
|
], $collectionView[0]->vars['block_prefixes']);
|
||||||
|
}
|
||||||
|
|
||||||
public function testSubmitNull($expected = null, $norm = null, $view = null)
|
public function testSubmitNull($expected = null, $norm = null, $view = null)
|
||||||
{
|
{
|
||||||
parent::testSubmitNull([], [], []);
|
parent::testSubmitNull([], [], []);
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Form\Tests\Fixtures;
|
||||||
|
|
||||||
|
use Symfony\Component\Form\AbstractType;
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
|
class BlockPrefixedFooTextType extends AbstractType
|
||||||
|
{
|
||||||
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
|
{
|
||||||
|
$resolver->setDefault('block_prefix', 'foo');
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user