Skip to content

Commit

Permalink
bug #30979 Fix the configurability of CoreExtension deps in standalon…
Browse files Browse the repository at this point in the history
…e usage (stof)

This PR was squashed before being merged into the 3.4 branch (closes #30979).

Discussion
----------

Fix the configurability of CoreExtension deps in standalone usage

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | not yet, but will allow fixing them
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | n/a

When using the Forms entrypoint to configure the component, there was no chance to configure dependencies of the CoreExtension, as the one registered without argument was first and would win.
The builder now delays the prepending of the CoreExtension to do it only if the CoreExtension is not registered explicitly.

We discovered that when trying to fix tests for the FileType, where we wanted to pass a Translator to it.

Commits
-------

934118b Fix the configurability of CoreExtension deps in standalone usage
  • Loading branch information
nicolas-grekas committed Apr 7, 2019
2 parents 77320cb + 934118b commit d8b03ee
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 7 deletions.
Expand Up @@ -69,7 +69,7 @@ protected function loadTypes()
new Type\TimeType(),
new Type\TimezoneType(),
new Type\UrlType(),
new Type\FileType(),
new Type\FileType($this->translator),
new Type\ButtonType(),
new Type\SubmitType(),
new Type\ResetType(),
Expand Down
27 changes: 27 additions & 0 deletions src/Symfony/Component/Form/FormFactoryBuilder.php
Expand Up @@ -11,13 +11,17 @@

namespace Symfony\Component\Form;

use Symfony\Component\Form\Extension\Core\CoreExtension;

/**
* The default implementation of FormFactoryBuilderInterface.
*
* @author Bernhard Schussek <bschussek@gmail.com>
*/
class FormFactoryBuilder implements FormFactoryBuilderInterface
{
private $forceCoreExtension;

/**
* @var ResolvedFormTypeFactoryInterface
*/
Expand All @@ -43,6 +47,14 @@ class FormFactoryBuilder implements FormFactoryBuilderInterface
*/
private $typeGuessers = [];

/**
* @param bool $forceCoreExtension
*/
public function __construct($forceCoreExtension = false)
{
$this->forceCoreExtension = $forceCoreExtension;
}

/**
* {@inheritdoc}
*/
Expand Down Expand Up @@ -144,6 +156,21 @@ public function getFormFactory()
{
$extensions = $this->extensions;

if ($this->forceCoreExtension) {
$hasCoreExtension = false;

foreach ($extensions as $extension) {
if ($extension instanceof CoreExtension) {
$hasCoreExtension = true;
break;
}
}

if (!$hasCoreExtension) {
array_unshift($extensions, new CoreExtension());
}
}

if (\count($this->types) > 0 || \count($this->typeExtensions) > 0 || \count($this->typeGuessers) > 0) {
if (\count($this->typeGuessers) > 1) {
$typeGuesser = new FormTypeGuesserChain($this->typeGuessers);
Expand Down
7 changes: 1 addition & 6 deletions src/Symfony/Component/Form/Forms.php
Expand Up @@ -11,8 +11,6 @@

namespace Symfony\Component\Form;

use Symfony\Component\Form\Extension\Core\CoreExtension;

/**
* Entry point of the Form component.
*
Expand Down Expand Up @@ -105,10 +103,7 @@ public static function createFormFactory()
*/
public static function createFormFactoryBuilder()
{
$builder = new FormFactoryBuilder();
$builder->addExtension(new CoreExtension());

return $builder;
return new FormFactoryBuilder(true);
}

/**
Expand Down

0 comments on commit d8b03ee

Please sign in to comment.