首页 > 解决方案 > EasyAdminBundle,configureUserMenu界面别让我回

问题描述

我有给定的错误:

The controller must return a "Symfony\Component\HttpFoundation\Response" object
but it returned an object of type EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu.
namespace App\Controller\User;

use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\HttpFoundation\Response;

class DashboardUserController extends AbstractDashboardController
{
    /**
     * @Route("/userPanel", name="userPanel")
     */
    public function configureUserMenu(UserInterface $user): UserMenu
    {
        // Usually it's better to call the parent method because that gives you a
        // user menu with some menu items already created ("sign out", "exit impersonation", etc.)
        // if you prefer to create the user menu from scratch, use: return UserMenu::new()->...
        return parent::configureUserMenu($user)
            // use the given $user object to get the user name
            ->setName($user->getUsername())
            // use this method if you don't want to display the name of the user
            ->displayUserName(false)
            // you can use any type of menu item, except submenus
            ->addMenuItems([
                MenuItem::linkToRoute('My Profile', 'fa fa-id-card', '...', ['...' => '...']),
                MenuItem::linkToRoute('Settings', 'fa fa-user-cog', '...', ['...' => '...']),
                MenuItem::section(),
                MenuItem::linkToLogout('Logout', 'fa fa-sign-out'),
            ]);
    }
}

标签: phpsymfonyeasyadmin3

解决方案


我看到的第一个问题是您有一条与configureUserMenu(). 路由应该返回某种类型的响应。您的仪表板控制器应该具有index()关联路由的功能。您可以在此处返回树枝模板。此外,您只需要 1 个用于 EasyAdmin 3 的仪表板控制器。

如果您希望能够创建/读取/更新/删除实体,那么您将需要创建一个 Crud 控制器。我建议您阅读EasyAdmin 文档,因为使用命令为您生成它实际上非常容易。这是一个仪表板控制器示例,请注意您的仪表板控制器可以覆盖很多功能AbstractDashboardController。所有这些信息在文档中都有详细的解释。

<?php
namespace App\Controller\Admin;

use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;

class DashboardController extends AbstractDashboardController
{
    /**
     * @Route("/admin", name="admin")
     */
    public function index(): Response
    {
        $templateVars = [];
        return $this->render('admin/dashboard.html.twig',$templateVars);
    }

    public function configureUserMenu(UserInterface $user): UserMenu
    {
        $userMenuItems = [
            MenuItem::linkToUrl('Profile','fa-id-card','/admin/profile'),
            MenuItem::linkToUrl('Settings','fa-user-cog','/admin/settings'),
            MenuItem::linkToLogout('__ea__user.sign_out', 'fa-sign-out')
        ];

        if ($this->isGranted(Permission::EA_EXIT_IMPERSONATION)) {
            $userMenuItems[] = 
            MenuItem::linkToExitImpersonation(
                '__ea__user.exit_impersonation', 
                'fa-user-lock'
            );
        }

        return UserMenu::new()
            ->displayUserName()
            ->displayUserAvatar()
            ->setName(method_exists($user, '__toString') ? (string) $user : $user->getUsername())
            ->setAvatarUrl(null)
            ->setMenuItems($userMenuItems);
    }
}

推荐阅读