sonata-project / SonataUserBundle

Symfony SonataUserBundle
https://docs.sonata-project.org/projects/SonataUserBundle
MIT License
339 stars 488 forks source link

In user-bundle 5.3.0, error: Key "form" for array with keys "role, role_translated, is_granted" does not exist. #1552

Closed wluijt-endertech closed 2 years ago

wluijt-endertech commented 2 years ago

Environment

Sonata packages

show

``` $ composer show --latest 'sonata-project/*' sonata-project/admin-bundle 4.14.0 4.14.0 The missing Symfony Admin Generator sonata-project/block-bundle 4.14.0 4.14.0 Symfony SonataBlockBundle sonata-project/cache 2.2.0 2.2.0 Cache library Package sonata-project/cache is abandoned, you should avoid using it. No replacement was suggested. sonata-project/doctrine-extensions 1.17.0 1.17.0 Doctrine2 behavioral extensions sonata-project/doctrine-orm-admin-bundle 4.3.1 4.3.1 Integrate Doctrine ORM into the SonataAdminBundle sonata-project/exporter 2.13.0 2.13.0 Lightweight Exporter library sonata-project/form-extensions 1.17.1 1.17.1 Symfony form extensions sonata-project/twig-extensions 1.10.0 1.10.0 Sonata twig extensions sonata-project/user-bundle 5.3.0 5.3.0 Symfony SonataUserBundle ```

Symfony packages

show

``` $ composer show --latest 'symfony/*' symfony/apache-pack v1.0.1 v1.0.1 A pack for Apache support in Symfony symfony/asset v5.4.7 v6.0.7 Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files symfony/cache v5.4.10 v6.0.10 Provides an extended PSR-6, PSR-16 (and tags) implementation symfony/cache-contracts v2.5.2 v3.0.2 Generic abstractions related to caching symfony/config v5.4.9 v6.0.9 Helps you find, load, combine, autofill and validate configuration values of any kind symfony/console v5.4.10 v6.0.10 Eases the creation of beautiful and testable command line interfaces symfony/css-selector v5.4.3 v6.0.3 Converts CSS selectors to XPath expressions symfony/dependency-injection v5.4.10 v6.0.10 Allows you to standardize and centralize the way objects are constructed in your application symfony/deprecation-contracts v2.5.2 v3.0.2 A generic function and convention to trigger deprecation notices symfony/doctrine-bridge v5.4.10 v6.0.10 Provides integration for Doctrine with various Symfony components symfony/dotenv v5.4.5 v6.0.5 Registers environment variables from a .env file symfony/error-handler v5.4.9 v6.0.9 Provides tools to manage errors and ease debugging PHP code symfony/event-dispatcher v5.4.9 v6.0.9 Provides tools that allow your application components to communicate with each other by dispatching events and listening to them symfony/event-dispatcher-contracts v2.5.2 v3.0.2 Generic abstractions related to dispatching event symfony/expression-language v5.4.10 v6.0.10 Provides an engine that can compile and evaluate expressions symfony/filesystem v5.4.9 v6.0.9 Provides basic utilities for the filesystem symfony/finder v5.4.8 v6.0.8 Finds files and directories via an intuitive fluent interface symfony/flex v1.19.2 v2.2.2 Composer plugin for Symfony symfony/form v5.4.10 v6.0.10 Allows to easily create, process and reuse HTML forms symfony/framework-bundle v5.4.10 v6.0.10 Provides a tight integration between Symfony components and the Symfony full-stack framework symfony/http-client v5.4.9 v6.0.9 Provides powerful methods to fetch HTTP resources synchronously or asynchronously symfony/http-client-contracts v2.5.2 v3.0.2 Generic abstractions related to HTTP clients symfony/http-foundation v5.4.10 v6.0.10 Defines an object-oriented layer for the HTTP specification symfony/http-kernel v5.4.10 v6.0.10 Provides a structured process for converting a Request into a Response symfony/intl v5.4.10 v6.0.8 Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library symfony/lock v5.4.10 v6.0.10 Creates and manages locks, a mechanism to provide exclusive access to a shared resource symfony/mailer v5.4.10 v6.0.10 Helps sending emails symfony/mime v5.4.10 v6.0.10 Allows manipulating MIME messages symfony/options-resolver v5.4.3 v6.0.3 Provides an improved replacement for the array_replace PHP function symfony/password-hasher v5.4.8 v6.0.8 Provides password hashing utilities symfony/phpunit-bridge v5.4.10 v6.1.2 Provides utilities for PHPUnit, especially user deprecation notices management symfony/polyfill-intl-grapheme v1.26.0 v1.26.0 Symfony polyfill for intl's grapheme_* functions symfony/polyfill-intl-icu v1.26.0 v1.26.0 Symfony polyfill for intl's ICU-related data and classes symfony/polyfill-intl-idn v1.26.0 v1.26.0 Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions symfony/polyfill-intl-normalizer v1.26.0 v1.26.0 Symfony polyfill for intl's Normalizer class and related functions symfony/polyfill-mbstring v1.26.0 v1.26.0 Symfony polyfill for the Mbstring extension symfony/polyfill-php73 v1.26.0 v1.26.0 Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions symfony/polyfill-php80 v1.26.0 v1.26.0 Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions symfony/polyfill-php81 v1.26.0 v1.26.0 Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions symfony/property-access v5.4.8 v6.0.8 Provides functions to read and write from/to an object or array using a simple string notation symfony/property-info v5.4.10 v6.0.10 Extracts information about PHP class' properties using metadata of popular sources symfony/proxy-manager-bridge v5.4.6 v6.0.6 Provides integration for ProxyManager with various Symfony components symfony/rate-limiter v5.4.9 v6.0.9 Provides a Token Bucket implementation to rate limit input and output in your application symfony/routing v5.4.8 v6.0.8 Maps an HTTP request to a set of configuration variables symfony/runtime v5.4.8 v6.0.8 Enables decoupling PHP applications from global state symfony/security-acl v3.3.1 v3.3.1 Symfony Security Component - ACL (Access Control List) symfony/security-bundle v5.4.9 v6.0.9 Provides a tight integration of the Security component into the Symfony full-stack framework symfony/security-core v5.4.10 v6.0.8 Symfony Security Component - Core Library symfony/security-csrf v5.4.9 v6.0.9 Symfony Security Component - CSRF Library symfony/security-guard v5.4.9 v5.4.9 Symfony Security Component - Guard symfony/security-http v5.4.10 v6.0.10 Symfony Security Component - HTTP Integration symfony/service-contracts v2.5.2 v3.0.2 Generic abstractions related to writing services symfony/string v5.4.10 v6.0.10 Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way symfony/translation v5.4.9 v6.0.9 Provides tools to internationalize your application symfony/translation-contracts v2.5.2 v3.0.2 Generic abstractions related to translation symfony/twig-bridge v5.4.9 v6.0.10 Provides integration for Twig with various Symfony components symfony/twig-bundle v5.4.8 v6.0.8 Provides a tight integration of Twig into the Symfony full-stack framework symfony/validator v5.4.10 v6.0.10 Provides tools to validate values symfony/var-dumper v5.4.9 v6.0.9 Provides mechanisms for walking through any arbitrary PHP variable symfony/var-exporter v5.4.10 v6.0.10 Allows exporting any serializable PHP data structure to plain PHP code symfony/yaml v5.4.10 v6.0.10 Loads and dumps YAML files ```

PHP version

$ php -v
PHP 8.0.8 (cli) (built: Sep 30 2021 13:54:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.8, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.8, Copyright (c), by Zend Technologies
    with Xdebug v3.0.3, Copyright (c) 2002-2021, by Derick Rethans

# also tried on:
PHP 7.4.16 (cli) (built: Mar  5 2021 14:34:52) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.16, Copyright (c), by Zend Technologies

Subject

The error can also be: Symfony\Component\Form\FormRenderer::searchAndRenderBlock(): Argument #1 ($view) must be of type Symfony\Component\Form\FormView, null given

This seems to work with the user-bundle 5.2.0 but not with 5.3.0. It's possible that the recent change to exclude the ROLE_DEFAULT / ROLE_USER is related.

Possible Solution

In the src/Resources/views/Form/roles_matrix_list.html.twig file, include a check for the form element before attempting to render it:

    <li>{{ attributes.form is defined ? form_widget(attributes.form, {label: attributes.role_translated, value: attributes.role}) }}</li>
VincentLanglet commented 2 years ago

Hi, do you know how it's related to the excluded_role PR ? I take a look at the and this seems weird to me.

IMHo, before adding a default check, we should understand the reason

wluijt-endertech commented 2 years ago

Well in my case, as I view a user edit form page, when I compared the working 5.2.0 version locally (and on a production server) against the 5.3.0 version which seemed to show an issue, there weren't many executable code changes really besides that one (https://github.com/sonata-project/SonataUserBundle/compare/5.2.0...5.3.0).

I suppose one other place to check would be the src/Twig/RolesMatrixExtension.php in the renderRolesList method. That area would at least be where the 'form' element is added.

VincentLanglet commented 2 years ago

Oh I see, it's certainly related to the extension. Since the role is excluded there is no form added for this one.