vendor/easycorp/easyadmin-bundle/src/Registry/DashboardControllerRegistry.php line 18

Open in your IDE?
  1. <?php
  2. namespace EasyCorp\Bundle\EasyAdminBundle\Registry;
  3. use EasyCorp\Bundle\EasyAdminBundle\Cache\CacheWarmer;
  4. use function Symfony\Component\String\u;
  5. /**
  6. * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  7. */
  8. final class DashboardControllerRegistry
  9. {
  10. private $controllerFqcnToContextIdMap = [];
  11. private $contextIdToControllerFqcnMap = [];
  12. private $controllerFqcnToRouteMap = [];
  13. private $routeToControllerFqcnMap = [];
  14. public function __construct(string $kernelSecret, string $cacheDir, array $dashboardControllersFqcn)
  15. {
  16. foreach ($dashboardControllersFqcn as $controllerFqcn) {
  17. $this->controllerFqcnToContextIdMap[$controllerFqcn] = substr(sha1($kernelSecret.$controllerFqcn), 0, 7);
  18. }
  19. $this->contextIdToControllerFqcnMap = array_flip($this->controllerFqcnToContextIdMap);
  20. $dashboardRoutesCachePath = $cacheDir.'/'.CacheWarmer::DASHBOARD_ROUTES_CACHE;
  21. $dashboardControllerRoutes = !file_exists($dashboardRoutesCachePath) ? [] : require $dashboardRoutesCachePath;
  22. foreach ($dashboardControllerRoutes as $routeName => $controller) {
  23. $this->controllerFqcnToRouteMap[u($controller)->before('::')->toString()] = $routeName;
  24. }
  25. $this->routeToControllerFqcnMap = array_flip($this->controllerFqcnToRouteMap);
  26. }
  27. public function getControllerFqcnByContextId(string $contextId): ?string
  28. {
  29. return $this->contextIdToControllerFqcnMap[$contextId] ?? null;
  30. }
  31. public function getContextIdByControllerFqcn(string $controllerFqcn): ?string
  32. {
  33. return $this->controllerFqcnToContextIdMap[$controllerFqcn] ?? null;
  34. }
  35. public function getControllerFqcnByRoute(string $routeName): ?string
  36. {
  37. return $this->routeToControllerFqcnMap[$routeName] ?? null;
  38. }
  39. public function getRouteByControllerFqcn(string $controllerFqcn): ?string
  40. {
  41. return $this->controllerFqcnToRouteMap[$controllerFqcn] ?? null;
  42. }
  43. public function getNumberOfDashboards(): int
  44. {
  45. return \count($this->controllerFqcnToContextIdMap);
  46. }
  47. public function getFirstDashboardRoute(): ?string
  48. {
  49. return \count($this->controllerFqcnToRouteMap) < 1 ? null : $this->controllerFqcnToRouteMap[array_key_first($this->controllerFqcnToRouteMap)];
  50. }
  51. }