sonata-project / SonataDoctrineORMAdminBundle

Integrate Doctrine ORM into the SonataAdminBundle
https://docs.sonata-project.org/projects/SonataDoctrineORMAdminBundle
MIT License
445 stars 344 forks source link

Non-mapped CallbackFilter datagrid field does not work with EntityType `field_type` #1568

Closed matjaz321 closed 2 years ago

matjaz321 commented 2 years ago

Environment

Sonata packages

show

``` $ composer show --latest 'sonata-project/*' Color legend: - patch or minor release available - update recommended - major release available - update possible - up to date version sonata-project/admin-bundle 4.2.1 4.2.1 The missing Symfony Admin Generator sonata-project/block-bundle 4.7.0 4.7.0 Symfony SonataBlockBundle sonata-project/cache 2.2.0 2.2.0 Cache library sonata-project/doctrine-extensions 1.14.0 1.14.0 Doctrine2 behavioral extensions sonata-project/doctrine-orm-admin-bundle 4.1.0 4.1.0 Integrate Doctrine ORM into the SonataAdminBundle sonata-project/exporter 2.8.0 2.8.0 Lightweight Exporter library sonata-project/form-extensions 1.12.1 1.12.1 Symfony form extensions sonata-project/twig-extensions 1.9.0 1.9.0 Sonata twig extensions ```

Doctrine packages

show

``` $ composer show --latest 'doctrine/*' Color legend: - patch or minor release available - update recommended - major release available - update possible - up to date version doctrine/annotations 1.13.2 1.13.2 Docblock Annotations Parser doctrine/cache 1.12.1 2.1.1 PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcac... doctrine/collections 1.6.8 1.6.8 PHP Doctrine Collections library that adds additional functionality on top of PHP arrays. doctrine/common 3.2.0 3.2.0 PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on ... doctrine/data-fixtures 1.5.1 1.5.1 Data Fixtures for all Doctrine Object Managers doctrine/dbal 2.13.4 3.1.3 Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management. doctrine/deprecations v0.5.3 v0.5.3 A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or s... doctrine/doctrine-bundle 2.4.3 2.4.3 Symfony DoctrineBundle doctrine/doctrine-fixtures-bundle 3.4.1 3.4.1 Symfony DoctrineFixturesBundle doctrine/doctrine-migrations-bundle 3.2.0 3.2.0 Symfony DoctrineMigrationsBundle doctrine/event-manager 1.1.1 1.1.1 The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects. doctrine/inflector 2.0.4 2.0.4 PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and sing... doctrine/instantiator 1.4.0 1.4.0 A small, lightweight utility to instantiate objects in PHP without invoking their constructors doctrine/lexer 1.2.1 1.2.1 PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers. doctrine/migrations 3.3.0 3.3.0 PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for vers... doctrine/orm 2.10.2 2.10.2 Object-Relational-Mapper for PHP doctrine/persistence 2.2.3 2.2.3 The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object map... doctrine/sql-formatter 1.1.1 1.1.1 a PHP SQL highlighting library ```

Symfony packages

show

``` $ composer show --latest 'symfony/*' Color legend: - patch or minor release available - update recommended - major release available - update possible - up to date version symfony/asset v5.3.4 v5.3.4 Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files symfony/browser-kit v5.3.4 v5.3.4 Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically symfony/cache v5.3.10 v5.3.10 Provides an extended PSR-6, PSR-16 (and tags) implementation symfony/cache-contracts v2.4.0 v2.4.0 Generic abstractions related to caching symfony/config v5.3.10 v5.3.10 Helps you find, load, combine, autofill and validate configuration values of any kind symfony/console v5.3.10 v5.3.10 Eases the creation of beautiful and testable command line interfaces symfony/css-selector v5.3.4 v5.3.4 Converts CSS selectors to XPath expressions symfony/debug-bundle v5.3.4 v5.3.4 Provides a tight integration of the Symfony Debug component into the Symfony full-stack framework symfony/dependency-injection v5.3.10 v5.3.10 Allows you to standardize and centralize the way objects are constructed in your application symfony/deprecation-contracts v2.4.0 v2.4.0 A generic function and convention to trigger deprecation notices symfony/doctrine-bridge v5.3.8 v5.3.8 Provides integration for Doctrine with various Symfony components symfony/dom-crawler v5.3.7 v5.3.7 Eases DOM navigation for HTML and XML documents symfony/error-handler v5.3.7 v5.3.7 Provides tools to manage errors and ease debugging PHP code symfony/event-dispatcher v5.3.7 v5.3.7 Provides tools that allow your application components to communicate with each other by dispatching events and listeni... symfony/event-dispatcher-contracts v2.4.0 v2.4.0 Generic abstractions related to dispatching event symfony/expression-language v5.3.7 v5.3.7 Provides an engine that can compile and evaluate expressions symfony/filesystem v5.3.4 v5.3.4 Provides basic utilities for the filesystem symfony/finder v5.3.7 v5.3.7 Finds files and directories via an intuitive fluent interface symfony/form v5.3.10 v5.3.10 Allows to easily create, process and reuse HTML forms symfony/framework-bundle v5.3.10 v5.3.10 Provides a tight integration between Symfony components and the Symfony full-stack framework symfony/http-client v5.3.10 v5.3.10 Provides powerful methods to fetch HTTP resources synchronously or asynchronously symfony/http-client-contracts v2.4.0 v2.4.0 Generic abstractions related to HTTP clients symfony/http-foundation v5.3.10 v5.3.10 Defines an object-oriented layer for the HTTP specification symfony/http-kernel v5.3.10 v5.3.10 Provides a structured process for converting a Request into a Response symfony/intl v5.3.8 v5.3.8 Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library symfony/mailer v5.3.9 v5.3.9 Helps sending emails symfony/mime v5.3.8 v5.3.8 Allows manipulating MIME messages symfony/monolog-bridge v5.3.7 v5.3.7 Provides integration for Monolog with various Symfony components symfony/monolog-bundle v3.7.0 v3.7.0 Symfony MonologBundle symfony/options-resolver v5.3.7 v5.3.7 Provides an improved replacement for the array_replace PHP function symfony/password-hasher v5.3.8 v5.3.8 Provides password hashing utilities symfony/phpunit-bridge v5.3.10 v5.3.10 Provides utilities for PHPUnit, especially user deprecation notices management symfony/polyfill-ctype v1.23.0 v1.23.0 Symfony polyfill for ctype functions symfony/polyfill-intl-grapheme v1.23.1 v1.23.1 Symfony polyfill for intl's grapheme_* functions symfony/polyfill-intl-idn v1.23.0 v1.23.0 Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions symfony/polyfill-intl-normalizer v1.23.0 v1.23.0 Symfony polyfill for intl's Normalizer class and related functions symfony/polyfill-php80 v1.23.1 v1.23.1 Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions symfony/polyfill-php81 v1.23.0 v1.23.0 Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions symfony/process v5.3.7 v5.3.7 Executes commands in sub-processes symfony/property-access v5.3.8 v5.3.8 Provides functions to read and write from/to an object or array using a simple string notation symfony/property-info v5.3.8 v5.3.8 Extracts information about PHP class' properties using metadata of popular sources symfony/proxy-manager-bridge v5.3.4 v5.3.4 Provides integration for ProxyManager with various Symfony components symfony/psr-http-message-bridge v2.1.1 v2.1.1 PSR HTTP message bridge symfony/routing v5.3.7 v5.3.7 Maps an HTTP request to a set of configuration variables symfony/security-acl v3.2.0 v3.2.0 Symfony Security Component - ACL (Access Control List) symfony/security-bundle v5.3.8 v5.3.8 Provides a tight integration of the Security component into the Symfony full-stack framework symfony/security-core v5.3.10 v5.3.10 Symfony Security Component - Core Library symfony/security-csrf v5.3.4 v5.3.4 Symfony Security Component - CSRF Library symfony/security-guard v5.3.7 v5.3.7 Symfony Security Component - Guard symfony/security-http v5.3.10 v5.3.10 Symfony Security Component - HTTP Integration symfony/serializer v5.3.10 v5.3.10 Handles serializing and deserializing data structures, including object graphs, into array structures or other formats... symfony/service-contracts v2.4.0 v2.4.0 Generic abstractions related to writing services symfony/stopwatch v5.3.4 v5.3.4 Provides a way to profile code symfony/string v5.3.10 v5.3.10 Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way symfony/templating v5.3.7 v5.3.7 Provides all the tools needed to build any kind of template system symfony/translation v5.3.10 v5.3.10 Provides tools to internationalize your application symfony/translation-contracts v2.4.0 v2.4.0 Generic abstractions related to translation symfony/twig-bridge v5.3.7 v5.3.7 Provides integration for Twig with various Symfony components symfony/twig-bundle v5.3.10 v5.3.10 Provides a tight integration of Twig into the Symfony full-stack framework symfony/validator v5.3.10 v5.3.10 Provides tools to validate values symfony/var-dumper v5.3.10 v5.3.10 Provides mechanisms for walking through any arbitrary PHP variable symfony/var-exporter v5.3.8 v5.3.8 Allows exporting any serializable PHP data structure to plain PHP code symfony/web-profiler-bundle v5.3.8 v5.3.8 Provides a development tool that gives detailed information about the execution of any request symfony/webpack-encore-bundle v1.12.0 v1.12.0 Integration with your Symfony app & Webpack Encore! symfony/yaml v5.3.6 v5.3.6 Loads and dumps YAML files ```

PHP version

$ php -v
PHP 7.4.25 (cli) (built: Oct 23 2021 11:03:28) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.25, Copyright (c), by Zend Technologies

Subject

toooni commented 2 years ago

The issue was introduced in 4.1.0. I am not sure and didn't have the time yet to check, but it might have something to do with this: https://github.com/sonata-project/SonataDoctrineORMAdminBundle/pull/1545/files#diff-f1cf10ef5a385627958c076574e9aefa52d2e24c254e239128812f868aca6808R92

The class option in DoctrineType seems to be null and this change might be the reason.

VincentLanglet commented 2 years ago

Then the two merge options calls should be updated to not override the existing value https://github.com/sonata-project/SonataDoctrineORMAdminBundle/blob/a7cbabefecdf65f84af85b3c39524b40e31522c4/src/Builder/DatagridBuilder.php#L94-L110

setOption('field_options', array_merge($newValues, $field->getOption('field_options')));

might be better ; do you want to try/make a PR @toooni ?

toooni commented 2 years ago

@VincentLanglet done 👍 Seems to work fine now.

matjaz321 commented 2 years ago

Thanks for fixing it so quickly