diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 226f6a0..7fd6107 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -21,7 +21,7 @@ jobs: - name: 'Setup PHP' uses: shivammathur/setup-php@v2 with: - php-version: '8.3' + php-version: '8.5' - name: 'Install dependencies' run: | @@ -42,37 +42,31 @@ jobs: matrix: include: # Lowest deps - - name: 'Test lowest deps Symfony 5.4 [Linux, PHP 7.4]' + - name: 'Test lowest deps Symfony 6.4 [Linux, PHP 8.2]' os: 'ubuntu-latest' - php: '7.4' - symfony: '5.4.*@dev' + php: '8.2' + symfony: '6.4.*' composer-flags: '--prefer-lowest' - allow-unstable: true + allow-unstable: false # Most recent versions - - name: 'Test Symfony 5.4 [Linux, PHP 8.0]' - os: 'ubuntu-latest' - php: '8.0' - symfony: '5.4.*@dev' - allow-unstable: true - - - name: 'Test Symfony 6.0 [Linux, PHP 8.1]' + - name: 'Test Symfony 7.4 [Linux, PHP 8.2]' os: 'ubuntu-latest' - php: '8.1' - symfony: '6.0.*@dev' - allow-unstable: true + php: '8.2' + symfony: '7.4.*' + allow-unstable: false - - name: 'Test next Symfony 6.4 [Linux, PHP 8.2]' + - name: 'Test Symfony 8.1 [Linux, PHP 8.5]' os: 'ubuntu-latest' - php: '8.2' - symfony: '6.4.*@dev' - allow-unstable: true + php: '8.5' + symfony: '8.1.*' + allow-unstable: false # Bleeding edge (unreleased dev versions where failures are allowed) - - name: 'Test next Symfony [Linux, PHP 8.3] (allowed failure)' + - name: 'Test next Symfony [Linux, PHP 8.5] (allowed failure)' os: 'ubuntu-latest' - php: '8.3' - symfony: '7.0.*@dev' + php: '8.5' + symfony: '8@dev' composer-flags: '--ignore-platform-req php' allow-unstable: true allow-failure: true @@ -99,7 +93,7 @@ jobs: run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: 'Cache dependencies' - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-php-${{ matrix.php }}-symfony-${{ matrix.symfony }}-${{ hashFiles('**/composer.json') }}-flags-${{ matrix.composer-flags }} diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index 2b834e8..2c6ac7f 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -33,6 +33,6 @@ 'single_line_throw' => false, 'simplified_null_return' => false, 'void_return' => true, - 'yoda_style' => [], + 'yoda_style' => ['equal' => false, 'identical' => false, 'less_and_greater' => false], ]) ; diff --git a/README.md b/README.md index b9c3a02..6a410d7 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ ElaoFormTranslationBundle ========================= -![](https://img.shields.io/badge/Symfony-4.0-blue.svg) -[![Build Status](http://api.travis-ci.org/Elao/ElaoFormTranslationBundle.png)](http://travis-ci.org/Elao/ElaoFormTranslationBundle) +[![CI](https://github.com/Elao/ElaoFormTranslationBundle/actions/workflows/ci.yaml/badge.svg)](https://github.com/Elao/ElaoFormTranslationBundle/actions/workflows/ci.yaml) Description: -------------- @@ -39,11 +38,13 @@ _Note: The keys will only be generated at runtime and won't be dumped when you u Installation: -------------- +This bundle supports maintained Symfony versions only. + Add ElaoFormTranslationBundle to your composer.json: ``` json { "require": { - "elao/form-translation-bundle": "3.*" + "elao/form-translation-bundle": "4.*" } } ``` @@ -54,19 +55,6 @@ Now download the bundle by running the command: $ php composer.phar update elao/form-translation-bundle ``` -Register the bundle in the kernel: - -``` php - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Resources/config/services.xml b/Resources/config/services.xml deleted file mode 100644 index 36edf92..0000000 --- a/Resources/config/services.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/Resources/doc/index.rst b/Resources/doc/index.rst deleted file mode 100644 index e69de29..0000000 diff --git a/Resources/meta/LICENSE b/Resources/meta/LICENSE deleted file mode 100644 index e69de29..0000000 diff --git a/composer.json b/composer.json index e81694e..a2d1392 100644 --- a/composer.json +++ b/composer.json @@ -16,23 +16,28 @@ } ], "require": { - "php": "^7.4|^8.0", - "symfony/framework-bundle": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0" + "php": "^8.2", + "symfony/framework-bundle": "^6.4|^7.4|^8.0", + "symfony/form": "^6.4|^7.4|^8.0", + "symfony/property-access": "^6.4|^7.4|^8.0" }, "require-dev": { - "ekino/phpstan-banned-code": "^1.0", + "ekino/phpstan-banned-code": "^3.2", "friendsofphp/php-cs-fixer": "^3.10", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-symfony": "^1.2", - "symfony/phpunit-bridge": "^5.0", - "phpstan/phpstan-phpunit": "^1.1" + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.2", + "phpstan/phpstan-symfony": "^2.0", + "symfony/phpunit-bridge": "^6.0", + "phpstan/phpstan-phpunit": "^2.0" }, "autoload": { "psr-4": { - "Elao\\Bundle\\FormTranslationBundle\\": "." + "Elao\\Bundle\\FormTranslationBundle\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Elao\\Bundle\\FormTranslationBundle\\Tests\\": "tests/" } }, "prefer-stable": true, diff --git a/config/forms.php b/config/forms.php new file mode 100644 index 0000000..54e3243 --- /dev/null +++ b/config/forms.php @@ -0,0 +1,42 @@ + + */ + +use Elao\Bundle\FormTranslationBundle\Form\Extension\ButtonTypeExtension; +use Elao\Bundle\FormTranslationBundle\Form\Extension\ChoiceTypeExtension; +use Elao\Bundle\FormTranslationBundle\Form\Extension\CollectionTypeExtension; +use Elao\Bundle\FormTranslationBundle\Form\Extension\FormTypeExtension; +use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; +use Symfony\Component\Form\Extension\Core\Type\ButtonType; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\Extension\Core\Type\CollectionType; +use Symfony\Component\Form\Extension\Core\Type\FormType; + +return static function (ContainerConfigurator $container): void { + $services = $container->services(); + + $services->set('elao.form_translation.extension.tree_aware_extension') + ->abstract(); + + $services->set('elao.form_translation.extension.form_type_extension', FormTypeExtension::class) + ->parent('elao.form_translation.extension.tree_aware_extension') + ->tag('form.type_extension', ['extended-type' => FormType::class]); + + $services->set('elao.form_translation.extension.collection_type_extension', CollectionTypeExtension::class) + ->parent('elao.form_translation.extension.tree_aware_extension') + ->tag('form.type_extension', ['extended-type' => CollectionType::class]); + + $services->set('elao.form_translation.extension.button_type_extension', ButtonTypeExtension::class) + ->parent('elao.form_translation.extension.tree_aware_extension') + ->tag('form.type_extension', ['extended-type' => ButtonType::class]); + + $services->set('elao.form_translation.extension.choice_type_extension', ChoiceTypeExtension::class) + ->parent('elao.form_translation.extension.tree_aware_extension') + ->tag('form.type_extension', ['extended-type' => ChoiceType::class]); +}; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..63323bf --- /dev/null +++ b/config/services.php @@ -0,0 +1,21 @@ + + */ + +use Elao\Bundle\FormTranslationBundle\Builders\FormKeyBuilder; +use Elao\Bundle\FormTranslationBundle\Builders\FormTreeBuilder; +use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; + +return static function (ContainerConfigurator $container): void { + $services = $container->services(); + + $services->set('elao.form_translation.tree_builder', FormTreeBuilder::class); + + $services->set('elao.form_translation.key_builder', FormKeyBuilder::class); +}; diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 4af2a3b..d9c584f 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -2,7 +2,7 @@ parameters: level: 8 paths: - - "./" + - "src/" excludePaths: - "vendor" diff --git a/phpunit.xml.dist b/phpunit.xml.dist index ce23af4..46f89c5 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -15,7 +15,7 @@ - ./Tests/ + tests diff --git a/Builders/FormKeyBuilder.php b/src/Builders/FormKeyBuilder.php similarity index 98% rename from Builders/FormKeyBuilder.php rename to src/Builders/FormKeyBuilder.php index 0faf804..c9c0e60 100644 --- a/Builders/FormKeyBuilder.php +++ b/src/Builders/FormKeyBuilder.php @@ -51,7 +51,7 @@ public function __construct( string $separator = '.', string $root = 'form', string $children = 'children', - string $prototype = 'prototype' + string $prototype = 'prototype', ) { $this->separator = $separator; $this->root = $root; diff --git a/Builders/FormTreeBuilder.php b/src/Builders/FormTreeBuilder.php similarity index 100% rename from Builders/FormTreeBuilder.php rename to src/Builders/FormTreeBuilder.php diff --git a/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php similarity index 100% rename from DependencyInjection/Configuration.php rename to src/DependencyInjection/Configuration.php diff --git a/DependencyInjection/ElaoFormTranslationExtension.php b/src/DependencyInjection/ElaoFormTranslationExtension.php similarity index 92% rename from DependencyInjection/ElaoFormTranslationExtension.php rename to src/DependencyInjection/ElaoFormTranslationExtension.php index 6476a71..a037154 100644 --- a/DependencyInjection/ElaoFormTranslationExtension.php +++ b/src/DependencyInjection/ElaoFormTranslationExtension.php @@ -13,9 +13,9 @@ use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Loader; use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\HttpKernel\DependencyInjection\Extension; /** * ElaoFormTranslation extension @@ -30,10 +30,10 @@ public function load(array $configs, ContainerBuilder $container): void $config = $this->processConfiguration($configuration, $configs); if ($config['enabled']) { - $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); + $loader = new Loader\PhpFileLoader($container, new FileLocator(dirname(__DIR__, 2) . '/config')); - $loader->load('services.xml'); - $loader->load('forms.xml'); + $loader->load('services.php'); + $loader->load('forms.php'); $this->loadTreeConfig($container, $loader, $config); } diff --git a/ElaoFormTranslationBundle.php b/src/ElaoFormTranslationBundle.php similarity index 100% rename from ElaoFormTranslationBundle.php rename to src/ElaoFormTranslationBundle.php diff --git a/Form/Extension/ButtonTypeExtension.php b/src/Form/Extension/ButtonTypeExtension.php similarity index 100% rename from Form/Extension/ButtonTypeExtension.php rename to src/Form/Extension/ButtonTypeExtension.php diff --git a/Form/Extension/ChoiceTypeExtension.php b/src/Form/Extension/ChoiceTypeExtension.php similarity index 100% rename from Form/Extension/ChoiceTypeExtension.php rename to src/Form/Extension/ChoiceTypeExtension.php diff --git a/Form/Extension/CollectionTypeExtension.php b/src/Form/Extension/CollectionTypeExtension.php similarity index 100% rename from Form/Extension/CollectionTypeExtension.php rename to src/Form/Extension/CollectionTypeExtension.php diff --git a/Form/Extension/FormTypeExtension.php b/src/Form/Extension/FormTypeExtension.php similarity index 100% rename from Form/Extension/FormTypeExtension.php rename to src/Form/Extension/FormTypeExtension.php diff --git a/Form/Extension/TreeAwareExtension.php b/src/Form/Extension/TreeAwareExtension.php similarity index 98% rename from Form/Extension/TreeAwareExtension.php rename to src/Form/Extension/TreeAwareExtension.php index bf536bf..f2620a7 100644 --- a/Form/Extension/TreeAwareExtension.php +++ b/src/Form/Extension/TreeAwareExtension.php @@ -133,6 +133,8 @@ protected function generateKey(FormView &$view, $key, $value): void /** * @param array &$vars + * + * @param-out array $vars */ protected function setVar(array &$vars, string $key, mixed $value): void { diff --git a/Model/FormTree.php b/src/Model/FormTree.php similarity index 100% rename from Model/FormTree.php rename to src/Model/FormTree.php diff --git a/Model/FormTreeNode.php b/src/Model/FormTreeNode.php similarity index 100% rename from Model/FormTreeNode.php rename to src/Model/FormTreeNode.php diff --git a/Tests/Builders/FormKeyBuilderTest.php b/tests/Builders/FormKeyBuilderTest.php similarity index 100% rename from Tests/Builders/FormKeyBuilderTest.php rename to tests/Builders/FormKeyBuilderTest.php diff --git a/Tests/Builders/FormTreeBuilderTest.php b/tests/Builders/FormTreeBuilderTest.php similarity index 100% rename from Tests/Builders/FormTreeBuilderTest.php rename to tests/Builders/FormTreeBuilderTest.php diff --git a/Tests/FormTranslationTestCase.php b/tests/FormTranslationTestCase.php similarity index 61% rename from Tests/FormTranslationTestCase.php rename to tests/FormTranslationTestCase.php index 67087a0..30d898c 100644 --- a/Tests/FormTranslationTestCase.php +++ b/tests/FormTranslationTestCase.php @@ -11,6 +11,10 @@ namespace Elao\Bundle\FormTranslationBundle\Tests; use Elao\Bundle\FormTranslationBundle\Form\Extension; +use Elao\Bundle\FormTranslationBundle\Form\Extension\ButtonTypeExtension; +use Elao\Bundle\FormTranslationBundle\Form\Extension\ChoiceTypeExtension; +use Elao\Bundle\FormTranslationBundle\Form\Extension\CollectionTypeExtension; +use Elao\Bundle\FormTranslationBundle\Form\Extension\FormTypeExtension; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\Form\Forms; @@ -30,15 +34,15 @@ protected function setUp(): void /** * Get Form Type Extensions * - * @return array + * @return array> */ protected function getTypeExtensions(): array { return [ - new Extension\ButtonTypeExtension(), - new Extension\ChoiceTypeExtension(), - new Extension\CollectionTypeExtension(), - new Extension\FormTypeExtension(), + new ButtonTypeExtension(), + new ChoiceTypeExtension(), + new CollectionTypeExtension(), + new FormTypeExtension(), ]; } }