sonata-project / SonataAdminBundle

The missing Symfony Admin Generator
https://docs.sonata-project.org/projects/SonataAdminBundle
MIT License
2.11k stars 1.26k forks source link

SIdebar menu is broken #6100

Closed judimator closed 4 years ago

judimator commented 4 years ago

Environment

Sonata packages

$ composer show --latest 'sonata-project/*'
sonata-project/admin-bundle              3.66.0 3.66.0 The missing Symfony Admin Generator
sonata-project/block-bundle              3.18.5 4.2.0  Symfony SonataBlockBundle
sonata-project/cache                     2.0.1  2.0.1  Cache library
sonata-project/core-bundle               3.18.0 3.18.0 Symfony SonataCoreBundle (abandoned)
sonata-project/datagrid-bundle           2.5.0  3.2.0  Symfony SonataDatagridBundle
sonata-project/doctrine-extensions       1.6.0  1.6.0  Doctrine2 behavioral extensions
sonata-project/doctrine-orm-admin-bundle 3.17.1 3.17.1 Symfony Sonata / Integrate Doctrine ORM into the SonataAdminBundle
sonata-project/easy-extends-bundle       2.5.0  2.5.0  Symfony SonataEasyExtendsBundle
sonata-project/exporter                  2.2.0  2.2.0  Lightweight Exporter library
sonata-project/user-bundle               4.5.3  4.5.3  Symfony SonataUserBundle

Symfony packages

$ composer show --latest 'symfony/*'
symfony/asset                      v4.4.8  v4.4.8  Symfony Asset Component
symfony/browser-kit                v4.4.8  v4.4.8  Symfony BrowserKit Component
symfony/cache                      v4.4.8  v4.4.8  Symfony Cache component with PSR-6, PSR-16, and tags
symfony/cache-contracts            v2.0.1  v2.0.1  Generic abstractions related to caching
symfony/config                     v4.4.8  v4.4.8  Symfony Config Component
symfony/console                    v4.4.8  v4.4.8  Symfony Console Component
symfony/css-selector               v4.4.8  v4.4.8  Symfony CssSelector Component
symfony/debug                      v4.4.8  v4.4.8  Symfony Debug Component
symfony/debug-bundle               v4.4.8  v4.4.8  Symfony DebugBundle
symfony/debug-pack                 v1.0.8  v1.0.8  A debug pack for Symfony projects
symfony/dependency-injection       v4.4.8  v4.4.8  Symfony DependencyInjection Component
symfony/doctrine-bridge            v4.4.8  v4.4.8  Symfony Doctrine Bridge
symfony/dom-crawler                v4.4.8  v4.4.8  Symfony DomCrawler Component
symfony/dotenv                     v4.4.8  v4.4.8  Registers environment variables from a .env file
symfony/error-handler              v4.4.8  v4.4.8  Symfony ErrorHandler Component
symfony/event-dispatcher           v4.4.8  v4.4.8  Symfony EventDispatcher Component
symfony/event-dispatcher-contracts v1.1.7  v2.0.1  Generic abstractions related to dispatching event
symfony/expression-language        v4.4.8  v4.4.8  Symfony ExpressionLanguage Component
symfony/filesystem                 v4.4.8  v4.4.8  Symfony Filesystem Component
symfony/finder                     v4.4.8  v4.4.8  Symfony Finder Component
symfony/flex                       v1.6.3  v1.7.0  Composer plugin for Symfony
symfony/form                       v4.4.8  v4.4.8  Symfony Form Component
symfony/framework-bundle           v4.4.8  v4.4.8  Symfony FrameworkBundle
symfony/http-client                v4.4.8  v4.4.8  Symfony HttpClient component
symfony/http-client-contracts      v2.0.1  v2.1.1  Generic abstractions related to HTTP clients
symfony/http-foundation            v4.4.8  v4.4.8  Symfony HttpFoundation Component
symfony/http-kernel                v4.4.8  v4.4.8  Symfony HttpKernel Component
symfony/inflector                  v4.4.8  v4.4.8  Symfony Inflector Component
symfony/intl                       v4.4.8  v4.4.8  A PHP replacement layer for the C intl extension that includes additional data from the ICU library.
symfony/mailer                     v4.4.8  v4.4.8  Symfony Mailer Component
symfony/maker-bundle               v1.17.0 v1.18.0 Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.
symfony/mime                       v4.4.8  v4.4.8  A library to manipulate MIME messages
symfony/monolog-bridge             v4.4.8  v4.4.8  Symfony Monolog Bridge
symfony/monolog-bundle             v3.5.0  v3.5.0  Symfony MonologBundle
symfony/options-resolver           v4.4.8  v4.4.8  Symfony OptionsResolver Component
symfony/orm-pack                   v1.0.8  v1.0.8  A pack for the Doctrine ORM
symfony/phpunit-bridge             v5.0.8  v5.0.8  Symfony PHPUnit Bridge
symfony/polyfill-intl-grapheme     v1.16.0 v1.17.0 Symfony polyfill for intl's grapheme_* functions
symfony/polyfill-intl-icu          v1.16.0 v1.17.0 Symfony polyfill for intl's ICU-related data and classes
symfony/polyfill-intl-idn          v1.16.0 v1.17.0 Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions
symfony/polyfill-intl-normalizer   v1.16.0 v1.17.0 Symfony polyfill for intl's Normalizer class and related functions
symfony/polyfill-mbstring          v1.16.0 v1.17.0 Symfony polyfill for the Mbstring extension
symfony/polyfill-php72             v1.16.0 v1.17.0 Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions
symfony/polyfill-php73             v1.16.0 v1.17.0 Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions
symfony/process                    v4.4.8  v4.4.8  Symfony Process Component
symfony/profiler-pack              v1.0.4  v1.0.4  A pack for the Symfony web profiler
symfony/property-access            v4.4.8  v4.4.8  Symfony PropertyAccess Component
symfony/property-info              v4.4.8  v4.4.8  Symfony Property Info Component
symfony/routing                    v4.4.8  v4.4.8  Symfony Routing Component
symfony/security-acl               v3.0.4  v3.0.4  Symfony Security Component - ACL (Access Control List)
symfony/security-bundle            v4.4.8  v4.4.8  Symfony SecurityBundle
symfony/security-core              v4.4.8  v4.4.8  Symfony Security Component - Core Library
symfony/security-csrf              v4.4.8  v4.4.8  Symfony Security Component - CSRF Library
symfony/security-guard             v4.4.8  v4.4.8  Symfony Security Component - Guard
symfony/security-http              v4.4.8  v4.4.8  Symfony Security Component - HTTP Integration
symfony/serializer                 v4.4.8  v4.4.8  Symfony Serializer Component
symfony/serializer-pack            v1.0.3  v1.0.3  A pack for the Symfony serializer
symfony/service-contracts          v2.0.1  v2.0.1  Generic abstractions related to writing services
symfony/stopwatch                  v4.4.8  v4.4.8  Symfony Stopwatch Component
symfony/string                     v5.0.8  v5.0.8  Symfony String component
symfony/templating                 v4.4.8  v4.4.8  Symfony Templating Component
symfony/test-pack                  v1.0.6  v1.0.6  A pack for functional and end-to-end testing within a Symfony app
symfony/translation                v4.4.8  v4.4.8  Symfony Translation Component
symfony/translation-contracts      v2.0.1  v2.0.1  Generic abstractions related to translation
symfony/twig-bridge                v4.4.8  v4.4.8  Symfony Twig Bridge
symfony/twig-bundle                v4.4.8  v4.4.8  Symfony TwigBundle
symfony/validator                  v4.4.8  v4.4.8  Symfony Validator Component
symfony/var-dumper                 v4.4.8  v4.4.8  Symfony mechanism for exploring and dumping PHP variables
symfony/var-exporter               v4.4.8  v4.4.8  A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code
symfony/web-link                   v4.4.8  v4.4.8  Symfony WebLink Component
symfony/web-profiler-bundle        v4.4.8  v4.4.8  Symfony WebProfilerBundle
symfony/yaml                       v4.4.8  v4.4.8  Symfony Yaml Component

PHP version

$ php -v
PHP 7.4.4 (cli) (built: Mar 31 2020 18:27:27) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Xdebug v2.9.5, Copyright (c) 2002-2020, by Derick Rethans

Subject

Sidebar menu is broken

Steps to reproduce

Admin service following:

App\Admin\RestaurantAdmin:
        arguments: [~, App\Entity\Restaurant, ~]
        calls:
            - [addChild, ['@App\Admin\MenuAdmin']]
        tags:
            - { name: sonata.admin, manager_type: orm, label: Restaurant, group: Restaurants, icon: '<i class="fa fa-cutlery"></i>', on_top: true }

App\Admin\MenuAdmin:
        arguments: [~, App\Entity\Menu, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, label: Menu, show_in_dashboard: false, group: Restaurants, icon: '<i class="fa fa-cutlery"></i>', on_top: true }

In RestaurantAdmin.php admin class following:

    /**
     * {@inheritDoc}
     */
    protected function configureSideMenu(ItemInterface $menu, $action, ?AdminInterface $childAdmin = null)
    {
        if (!$childAdmin && !in_array($action, ['edit'])) {
            return;
        }

        $admin = $this->isChild() ? $this->getParent() : $this;

        $id = $admin->getRequest()->get('id');
        $menu->addChild('Restaurant', $admin->generateMenuUrl('edit', ['id' => $id]))
            ->addChild('Menu', $admin->generateMenuUrl('App\Admin\RestaurantAdmin|App\Admin\MenuAdmin.list', ['id' => $id]));
    }

Expected results

image

Actual results

image

VincentLanglet commented 4 years ago

Did you try older version of this Bundle to know since when it's broken ?

Gasjki commented 4 years ago

I encountered this problem a while ago. If I remember correctly, I did this instead of code (even if they are equivalent)

$menu->addChild('Restaurant', $admin->generateMenuUrl('edit', ['id' => $id]));
$menu->addChild('Menu', $admin->generateMenuUrl('App\Admin\RestaurantAdmin|App\Admin\MenuAdmin.list', ['id' => $id]));

As you can see I'm calling from $menu each time instead of chaining these commands.

judimator commented 4 years ago

Indeed! It really helped! I did not notice that this "tricky" fluent interface. Thanks a mil!

VincentLanglet commented 4 years ago

Indeed, from the phpdoc.

/**
 * Add a child menu item to this menu
 *
 * Returns the child item