<?phpnamespace EasyCorp\Bundle\EasyAdminBundle\Dto;/** * @author Javier Eguiluz <javier.eguiluz@gmail.com> */final class MenuItemDto{    public const TYPE_CRUD = 'crud';    public const TYPE_URL = 'url';    public const TYPE_SECTION = 'section';    public const TYPE_EXIT_IMPERSONATION = 'exit_impersonation';    public const TYPE_DASHBOARD = 'dashboard';    public const TYPE_LOGOUT = 'logout';    public const TYPE_SUBMENU = 'submenu';    public const TYPE_ROUTE = 'route';    private $type;    private $index;    private $subIndex;    private $label;    private $icon;    private $cssClass;    private $permission;    private $routeName;    private $routeParameters;    private $linkUrl;    private $linkRel;    private $linkTarget;    private $translationParameters;    /** @var MenuItemBadgeDto|null */    private $badge;    /** @var MenuItemDto[] */    private $subItems;    public function __construct()    {        $this->cssClass = '';        $this->translationParameters = [];        $this->linkRel = '';        $this->linkTarget = '_self';        $this->badge = null;        $this->subItems = [];    }    public function getType(): string    {        return $this->type;    }    public function setType(string $type): void    {        $this->type = $type;    }    public function getIndex(): int    {        return $this->index;    }    public function setIndex(int $index): void    {        $this->index = $index;    }    public function getSubIndex(): int    {        return $this->subIndex;    }    public function setSubIndex(int $subIndex): void    {        $this->subIndex = $subIndex;    }    public function getLabel(): string    {        return $this->label;    }    public function setLabel(string $label): void    {        $this->label = $label;    }    public function getIcon(): ?string    {        return $this->icon;    }    public function setIcon(?string $icon): void    {        $this->icon = $icon;    }    public function getLinkUrl(): ?string    {        return $this->linkUrl;    }    public function setLinkUrl(?string $linkUrl): void    {        $this->linkUrl = $linkUrl;    }    public function getRouteName(): ?string    {        return $this->routeName;    }    public function setRouteName(?string $routeName): void    {        $this->routeName = $routeName;    }    public function getRouteParameters(): ?array    {        return $this->routeParameters;    }    public function setRouteParameter(string $parameterName, $parameterValue): void    {        $this->routeParameters[$parameterName] = $parameterValue;    }    public function setRouteParameters(?array $routeParameters): void    {        $this->routeParameters = $routeParameters;    }    public function getPermission(): ?string    {        return $this->permission;    }    public function setPermission(?string $permission): void    {        $this->permission = $permission;    }    public function getCssClass(): string    {        return $this->cssClass;    }    public function setCssClass(string $cssClass): void    {        $this->cssClass = $cssClass;    }    public function getLinkRel(): string    {        return $this->linkRel;    }    public function setLinkRel(string $linkRel): void    {        $this->linkRel = $linkRel;    }    public function getLinkTarget(): string    {        return $this->linkTarget;    }    public function setLinkTarget(string $linkTarget): void    {        $this->linkTarget = $linkTarget;    }    public function getTranslationParameters(): array    {        return $this->translationParameters;    }    public function setTranslationParameters(array $translationParameters): void    {        $this->translationParameters = $translationParameters;    }    public function getBadge(): ?MenuItemBadgeDto    {        return $this->badge;    }    public function setBadge($content, string $style): void    {        $this->badge = new MenuItemBadgeDto($content, trim($style));    }    /**     * @return MenuItemDto[]     */    public function getSubItems(): array    {        return $this->subItems;    }    /**     * @param MenuItemDto[] $subItems     */    public function setSubItems(array $subItems): void    {        $this->subItems = $subItems;    }    public function hasSubItems(): bool    {        return self::TYPE_SUBMENU === $this->type && \count($this->subItems) > 0;    }    public function isMenuSection(): bool    {        return self::TYPE_SECTION === $this->type;    }}