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'),]);
    }
}

解决方法

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

如果您希望能够创建/读取/更新/删除实体,那么您需要制作一个 Crud 控制器。我建议您阅读 "gcloud app logs tail" shows week old data,因为使用命令为您生成它实际上很容易。这是一个仪表板控制器示例,请注意您的仪表板控制器可以在 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);
    }
}