From 717561afb451ea901e6df3fe1647a6da60896f8f Mon Sep 17 00:00:00 2001 From: Tobias Feijten Date: Tue, 2 Dec 2025 18:28:53 +0100 Subject: [PATCH] Add compatibility with Symfony 7 and 8, rework service config to PHP --- .../AdmingeneratorFormExtensionsExtension.php | 12 +- Resources/config/services.php | 67 ++++++++++ Resources/config/services.xml | 122 ------------------ Twig/Extension/ImageAssetsExtension.php | 2 +- Validator/Constraints/LatLngValidator.php | 6 +- composer.json | 24 ++-- 6 files changed, 87 insertions(+), 146 deletions(-) create mode 100644 Resources/config/services.php delete mode 100644 Resources/config/services.xml diff --git a/DependencyInjection/AdmingeneratorFormExtensionsExtension.php b/DependencyInjection/AdmingeneratorFormExtensionsExtension.php index a4ae0e0..2e75f9f 100644 --- a/DependencyInjection/AdmingeneratorFormExtensionsExtension.php +++ b/DependencyInjection/AdmingeneratorFormExtensionsExtension.php @@ -9,7 +9,6 @@ use Admingenerator\FormExtensionsBundle\Form\Extension\SingleUploadExtension; use Admingenerator\FormExtensionsBundle\Twig\Extension\ImageAssetsExtension; use Admingenerator\FormExtensionsBundle\Twig\Extension\IncludeGlobalsExtension; -use Admingenerator\FormExtensionsBundle\Twig\Extension\LegacyIncludeGlobalsExtension; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader; @@ -18,7 +17,6 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference; -use Twig\Environment; /** * Loads FormExtensions configuration @@ -35,8 +33,8 @@ public function load(array $configs, ContainerBuilder $container): void $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); - $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); - $loader->load('services.xml'); + $loader = new Loader\PhpFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); + $loader->load('services.php'); $container->setParameter('admingenerator.form.upload_manager', $config['upload_manager']); $container->setParameter('admingenerator.form.image_manipulator', $config['image_manipulator']); @@ -89,15 +87,15 @@ private function loadUploadCollectionListener(array $config, ContainerBuilder $c } $collectionUploadListenerDefinition = new Definition('%admingenerator.form.upload_collection_listener.class%'); - $collectionUploadListenerDefinition->setArguments(array( + $collectionUploadListenerDefinition->setArguments([ new Reference($config['file_storage']), $routeName, new Reference('property_accessor') - )); + ]); $collectionUploadListenerDefinition->addTag('kernel.event_subscriber'); $container->setDefinition('admingenerator.form.upload_collection_listener', $collectionUploadListenerDefinition); - $container->getDefinition('admingenerator.form.extensions.type.upload_collection')->addMethodCall('setFileStorage', array(new Reference($config['file_storage']))); + $container->getDefinition('admingenerator.form.extensions.type.upload_collection')->addMethodCall('setFileStorage', [new Reference($config['file_storage'])]); } } diff --git a/Resources/config/services.php b/Resources/config/services.php new file mode 100644 index 0000000..f8ef59b --- /dev/null +++ b/Resources/config/services.php @@ -0,0 +1,67 @@ +parameters()->set('admingenerator.form.upload_collection_listener.class', UploadCollectionListener::class); + + $services = $container->services(); + $configureFormType = static fn(string $id, string $class) => $services->set($id, $class)->tag('form.type'); + $configureFormType('admingenerator.form.extensions.type.bootstrap_table_collection', BootstrapTableCollectionType::class); + $configureFormType('admingenerator.form.extensions.type.bootstrap_fieldset_collection', BootstrapFieldsetCollectionType::class); + $configureFormType('admingenerator.form.extensions.type.bootstrap_money', MoneyType::class); + $configureFormType('admingenerator.form.extensions.type.upload_collection', UploadCollectionType::class); + $configureFormType('admingenerator.form.extensions.type.datetime_picker', DateTimePickerType::class); + $configureFormType('admingenerator.form.extensions.type.daterange_picker', DateRangePickerType::class) + ->call('setTranslator', [service('translator')]); + $configureFormType('admingenerator.form.extensions.type.date_picker', DatePickerType::class); + $configureFormType('admingenerator.form.extensions.type.double_list_entity', DoubleListEntityType::class); + $configureFormType('admingenerator.form.extensions.type.double_list_document', DoubleListDocumentType::class); + $configureFormType('admingenerator.form.extensions.type.double_list_model', DoubleListModelType::class); + $configureFormType('admingenerator.form.extensions.type.elastic_textarea', ElasticTextareaType::class); + $configureFormType('admingenerator.form.extensions.type.google_map', GoogleMapType::class); + $configureFormType('admingenerator.form.extensions.type.knob', KnobType::class); + $configureFormType('admingenerator.form.extensions.type.mini_colors', MiniColorsType::class); + $configureFormType('admingenerator.form.extensions.type.select2_entity', Select2EntityType::class); + $configureFormType('admingenerator.form.extensions.type.select2_document', Select2DocumentType::class); + $configureFormType('admingenerator.form.extensions.type.select2_model', Select2ModelType::class); + $configureFormType('admingenerator.form.extensions.type.select2_locale', Select2LocaleType::class); + $configureFormType('admingenerator.form.extensions.type.select2_language', Select2LanguageType::class); + $configureFormType('admingenerator.form.extensions.type.select2_country', Select2CountryType::class); + $configureFormType('admingenerator.form.extensions.type.select2_timezone', Select2TimezoneType::class); + $configureFormType('admingenerator.form.extensions.type.select2_choice', Select2ChoiceType::class); + $configureFormType('admingenerator.form.extensions.type.single_upload', SingleUploadType::class); + $configureFormType('admingenerator.form.extensions.type.time_picker', TimePickerType::class); + $configureFormType('admingenerator.form.extensions.type.select2_hidden', Select2HiddenType::class); + + $services->set('admingenerator.form.file_storage.local', LocalFileStorage::class) + ->arg('$requestStack', service('request_stack')); +}; diff --git a/Resources/config/services.xml b/Resources/config/services.xml deleted file mode 100644 index 91f1c42..0000000 --- a/Resources/config/services.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - Admingenerator\FormExtensionsBundle\EventListener\UploadCollectionListener - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Twig/Extension/ImageAssetsExtension.php b/Twig/Extension/ImageAssetsExtension.php index 5c7a156..b7de3e3 100644 --- a/Twig/Extension/ImageAssetsExtension.php +++ b/Twig/Extension/ImageAssetsExtension.php @@ -42,7 +42,7 @@ public function getFilters(): array /** * Gets the browser path for the image and filter to apply. * - * @return string The public path. + * @return string|null The public path. */ public function asset(object $object, string $field): ?string { diff --git a/Validator/Constraints/LatLngValidator.php b/Validator/Constraints/LatLngValidator.php index b26fae5..c6cf9c9 100644 --- a/Validator/Constraints/LatLngValidator.php +++ b/Validator/Constraints/LatLngValidator.php @@ -8,19 +8,17 @@ class LatLngValidator extends ConstraintValidator { - public function validate($value, Constraint $constraint): bool + public function validate($value, Constraint $constraint): void { if (!($constraint instanceof LatLng)) { throw new InvalidArgumentException(sprintf('Expected %s, got %s', LatLng::class, $constraint::class)); } if (!preg_match('/^[0-9\-\.]+$/', $value['lat'], $matches) || !preg_match('/^[0-9\-\.]+$/', $value['lng'], $matches)) { $this->context->addViolation($constraint->message, ['%lat%' => (float)$value['lat'], '%lng%' => (float)$value['lng']]); - return false; + return; } if ($value['lat'] > 90 || $value['lat'] < -90 || $value['lng'] > 180 || $value['lng'] < -180) { $this->context->addViolation($constraint->message, ['%lat%' => (float)$value['lat'], '%lng%' => (float)$value['lng']]); - return false; } - return true; } } diff --git a/composer.json b/composer.json index 2ebc282..3e5cbe4 100644 --- a/composer.json +++ b/composer.json @@ -16,19 +16,19 @@ ], "require": { "php": ">=8.1.0", - "symfony/config": "~4.4|~5.4|~6.2", - "symfony/dependency-injection": "~4.4|~5.4|~6.2", - "symfony/event-dispatcher": "~4.4|~5.4|~6.2", - "symfony/form": "~4.4|~5.4|~6.2", - "symfony/http-foundation": "~4.4|~5.4|~6.2", - "symfony/http-kernel": "~4.4|~5.4|~6.2", - "symfony/options-resolver": "~4.4|~5.4|~6.2", - "symfony/property-access": "~4.4|~5.4|~6.2", - "symfony/translation": "~4.4|~5.4|~6.2", + "symfony/config": "~5.4|~6.4|~7.4|~8.0", + "symfony/dependency-injection": "~5.4|~6.4|~7.4|~8.0", + "symfony/event-dispatcher": "~5.4|~6.4|~7.4|~8.0", + "symfony/form": "~5.4|~6.4|~7.4|~8.0", + "symfony/http-foundation": "~5.4|~6.4|~7.4|~8.0", + "symfony/http-kernel": "~5.4|~6.4|~7.4|~8.0", + "symfony/options-resolver": "~5.4|~6.4|~7.4|~8.0", + "symfony/property-access": "~5.4|~6.4|~7.4|~8.0", + "symfony/translation": "~5.4|~6.4|~7.4|~8.0", "symfony/translation-contracts": "~1.0|~2.0|~3.0", - "symfony/twig-bridge": "~4.4|~5.4|~6.2", - "symfony/validator": "~4.4|~5.4|~6.2", - "twig/twig": "^2.15.3||^3.4.3", + "symfony/twig-bridge": "~5.4|~6.4|~7.4|~8.0", + "symfony/validator": "~5.4|~6.4|~7.4|~8.0", + "twig/twig": "^3.4.3", "symfony2admingenerator/form-bundle": "~1.7|~2.0" }, "suggest": {